mirror of
https://github.com/ZwareBear/awx.git
synced 2026-04-20 15:01:48 -05:00
Updated delete warnings to indicate resources that may be invalidated as a result of deletion
This commit is contained in:
@@ -77,12 +77,16 @@ function search (params, config) {
|
||||
});
|
||||
}
|
||||
|
||||
function httpGet (resource) {
|
||||
function httpGet (resource, config) {
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: this.path
|
||||
};
|
||||
|
||||
if (config && config.params) {
|
||||
req.params = config.params;
|
||||
}
|
||||
|
||||
if (typeof resource === 'object') {
|
||||
this.model.GET = resource;
|
||||
|
||||
@@ -143,6 +147,19 @@ function httpOptions (resource) {
|
||||
});
|
||||
}
|
||||
|
||||
function httpDelete (resource) {
|
||||
const req = {
|
||||
method: 'DELETE',
|
||||
url: this.path
|
||||
};
|
||||
|
||||
if (resource) {
|
||||
req.url = `${this.path}${resource}/`;
|
||||
}
|
||||
|
||||
return $http(req).then(res => res);
|
||||
}
|
||||
|
||||
function options (keys) {
|
||||
return this.find('options', keys);
|
||||
}
|
||||
@@ -349,6 +366,32 @@ function graft (id) {
|
||||
return new this.Constructor('get', item, true);
|
||||
}
|
||||
|
||||
function getDependentResourceCounts (id) {
|
||||
if (this.setDependentResources) {
|
||||
this.setDependentResources(id);
|
||||
} else {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
|
||||
const dependentResourcePromises = [];
|
||||
|
||||
this.dependentResources.forEach(dependentResource => {
|
||||
const config = {};
|
||||
|
||||
if (dependentResource.params) {
|
||||
config.params = dependentResource.params;
|
||||
}
|
||||
|
||||
dependentResourcePromises.push(dependentResource.model.http.get(undefined, config)
|
||||
.then((val) => ({
|
||||
label: dependentResource.model.label,
|
||||
count: val.data.count
|
||||
})));
|
||||
});
|
||||
|
||||
return Promise.all(dependentResourcePromises);
|
||||
}
|
||||
|
||||
/**
|
||||
* `create` is called on instantiation of every model. Models can be
|
||||
* instantiated empty or with `GET` and/or `OPTIONS` requests that yield data.
|
||||
@@ -407,12 +450,14 @@ function BaseModel (path, settings) {
|
||||
this.set = set;
|
||||
this.unset = unset;
|
||||
this.extend = extend;
|
||||
this.getDependentResourceCounts = getDependentResourceCounts;
|
||||
|
||||
this.http = {
|
||||
get: httpGet.bind(this),
|
||||
options: httpOptions.bind(this),
|
||||
post: httpPost.bind(this),
|
||||
put: httpPut.bind(this),
|
||||
delete: httpDelete.bind(this)
|
||||
};
|
||||
|
||||
this.model = {};
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
const ENCRYPTED_VALUE = '$encrypted$';
|
||||
|
||||
let BaseModel;
|
||||
let ProjectModel;
|
||||
let JobTemplateModel;
|
||||
let InventoryModel;
|
||||
let InventorySourceModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function createFormSchema (method, config) {
|
||||
if (!config) {
|
||||
@@ -40,22 +45,73 @@ function assignInputGroupValues (inputs) {
|
||||
});
|
||||
}
|
||||
|
||||
function setDependentResources (id) {
|
||||
this.dependentResources = [
|
||||
{
|
||||
model: new ProjectModel(),
|
||||
params: {
|
||||
credential: id
|
||||
}
|
||||
},
|
||||
{
|
||||
model: new JobTemplateModel(),
|
||||
params: {
|
||||
credential: id,
|
||||
ask_credential_on_launch: false
|
||||
}
|
||||
},
|
||||
{
|
||||
model: new InventoryModel(),
|
||||
params: {
|
||||
insights_credential: id
|
||||
}
|
||||
},
|
||||
{
|
||||
model: new InventorySourceModel(),
|
||||
params: {
|
||||
credential: id
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function CredentialModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'credentials');
|
||||
|
||||
this.Constructor = CredentialModel;
|
||||
this.createFormSchema = createFormSchema.bind(this);
|
||||
this.assignInputGroupValues = assignInputGroupValues.bind(this);
|
||||
this.setDependentResources = setDependentResources.bind(this);
|
||||
this.label = ModelsStrings.get('labels.CREDENTIAL');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function CredentialModelLoader (_BaseModel_) {
|
||||
function CredentialModelLoader (
|
||||
_BaseModel_,
|
||||
_ProjectModel_,
|
||||
_JobTemplateModel_,
|
||||
_InventoryModel_,
|
||||
_InventorySourceModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
ProjectModel = _ProjectModel_;
|
||||
JobTemplateModel = _JobTemplateModel_;
|
||||
InventoryModel = _InventoryModel_;
|
||||
InventorySourceModel = _InventorySourceModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return CredentialModel;
|
||||
}
|
||||
|
||||
CredentialModelLoader.$inject = ['BaseModel'];
|
||||
CredentialModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'ProjectModel',
|
||||
'JobTemplateModel',
|
||||
'InventoryModel',
|
||||
'InventorySourceModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default CredentialModelLoader;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
let BaseModel;
|
||||
let CredentialModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function categorizeByKind () {
|
||||
const group = {};
|
||||
@@ -30,22 +32,45 @@ function mergeInputProperties () {
|
||||
});
|
||||
}
|
||||
|
||||
function setDependentResources (id) {
|
||||
this.dependentResources = [
|
||||
{
|
||||
model: new CredentialModel(),
|
||||
params: {
|
||||
credential_type: id
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function CredentialTypeModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'credential_types');
|
||||
|
||||
this.Constructor = CredentialTypeModel;
|
||||
this.categorizeByKind = categorizeByKind.bind(this);
|
||||
this.mergeInputProperties = mergeInputProperties.bind(this);
|
||||
this.setDependentResources = setDependentResources.bind(this);
|
||||
this.label = ModelsStrings.get('labels.CREDENTIAL_TYPE');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function CredentialTypeModelLoader (_BaseModel_) {
|
||||
function CredentialTypeModelLoader (
|
||||
_BaseModel_,
|
||||
_CredentialModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
CredentialModel = _CredentialModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return CredentialTypeModel;
|
||||
}
|
||||
|
||||
CredentialTypeModelLoader.$inject = ['BaseModel'];
|
||||
CredentialTypeModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'CredentialModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default CredentialTypeModelLoader;
|
||||
|
||||
44
awx/ui/client/lib/models/Inventory.js
Normal file
44
awx/ui/client/lib/models/Inventory.js
Normal file
@@ -0,0 +1,44 @@
|
||||
let BaseModel;
|
||||
let JobTemplateModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function setDependentResources (id) {
|
||||
this.dependentResources = [
|
||||
{
|
||||
model: new JobTemplateModel(),
|
||||
params: {
|
||||
inventory: id
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function InventoryModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'inventories');
|
||||
|
||||
this.Constructor = InventoryModel;
|
||||
this.setDependentResources = setDependentResources.bind(this);
|
||||
this.label = ModelsStrings.get('labels.INVENTORY');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function InventoryModelLoader (
|
||||
_BaseModel_,
|
||||
_JobTemplateModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
JobTemplateModel = _JobTemplateModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return InventoryModel;
|
||||
}
|
||||
|
||||
InventoryModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'JobTemplateModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default InventoryModelLoader;
|
||||
44
awx/ui/client/lib/models/InventoryScript.js
Normal file
44
awx/ui/client/lib/models/InventoryScript.js
Normal file
@@ -0,0 +1,44 @@
|
||||
let BaseModel;
|
||||
let InventorySourceModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function setDependentResources (id) {
|
||||
this.dependentResources = [
|
||||
{
|
||||
model: new InventorySourceModel(),
|
||||
params: {
|
||||
source_script: id
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function InventoryScriptModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'inventory_scripts');
|
||||
|
||||
this.Constructor = InventoryScriptModel;
|
||||
this.setDependentResources = setDependentResources.bind(this);
|
||||
this.label = ModelsStrings.get('labels.INVENTORY_SCRIPT');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function InventoryScriptModelLoader (
|
||||
_BaseModel_,
|
||||
_InventorySourceModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
InventorySourceModel = _InventorySourceModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return InventoryScriptModel;
|
||||
}
|
||||
|
||||
InventoryScriptModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'InventorySourceModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default InventoryScriptModelLoader;
|
||||
44
awx/ui/client/lib/models/InventorySource.js
Normal file
44
awx/ui/client/lib/models/InventorySource.js
Normal file
@@ -0,0 +1,44 @@
|
||||
let BaseModel;
|
||||
let WorkflowJobTemplateNodeModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function setDependentResources (id) {
|
||||
this.dependentResources = [
|
||||
{
|
||||
model: new WorkflowJobTemplateNodeModel(),
|
||||
params: {
|
||||
unified_job_template: id
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function InventorySourceModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'inventory_sources');
|
||||
|
||||
this.Constructor = InventorySourceModel;
|
||||
this.setDependentResources = setDependentResources.bind(this);
|
||||
this.label = ModelsStrings.get('labels.INVENTORY_SOURCE');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function InventorySourceModelLoader (
|
||||
_BaseModel_,
|
||||
_WorkflowJobTemplateNodeModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
WorkflowJobTemplateNodeModel = _WorkflowJobTemplateNodeModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return InventorySourceModel;
|
||||
}
|
||||
|
||||
InventorySourceModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'WorkflowJobTemplateNodeModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default InventorySourceModelLoader;
|
||||
44
awx/ui/client/lib/models/JobTemplate.js
Normal file
44
awx/ui/client/lib/models/JobTemplate.js
Normal file
@@ -0,0 +1,44 @@
|
||||
let BaseModel;
|
||||
let WorkflowJobTemplateNodeModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function setDependentResources (id) {
|
||||
this.dependentResources = [
|
||||
{
|
||||
model: new WorkflowJobTemplateNodeModel(),
|
||||
params: {
|
||||
unified_job_template: id
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function JobTemplateModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'job_templates');
|
||||
|
||||
this.Constructor = JobTemplateModel;
|
||||
this.setDependentResources = setDependentResources.bind(this);
|
||||
this.label = ModelsStrings.get('labels.JOB_TEMPLATE');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function JobTemplateModelLoader (
|
||||
_BaseModel_,
|
||||
_WorkflowJobTemplateNodeModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
WorkflowJobTemplateNodeModel = _WorkflowJobTemplateNodeModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return JobTemplateModel;
|
||||
}
|
||||
|
||||
JobTemplateModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'WorkflowJobTemplateNodeModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default JobTemplateModelLoader;
|
||||
@@ -1,19 +1,28 @@
|
||||
let BaseModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function OrganizationModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'organizations');
|
||||
|
||||
this.Constructor = OrganizationModel;
|
||||
this.label = ModelsStrings.get('labels.ORGANIZATION');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function OrganizationModelLoader (_BaseModel_) {
|
||||
function OrganizationModelLoader (
|
||||
_BaseModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return OrganizationModel;
|
||||
}
|
||||
|
||||
OrganizationModelLoader.$inject = ['BaseModel'];
|
||||
OrganizationModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default OrganizationModelLoader;
|
||||
|
||||
64
awx/ui/client/lib/models/Project.js
Normal file
64
awx/ui/client/lib/models/Project.js
Normal file
@@ -0,0 +1,64 @@
|
||||
let BaseModel;
|
||||
let JobTemplateModel;
|
||||
let WorkflowJobTemplateNodeModel;
|
||||
let InventorySourceModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function setDependentResources (id) {
|
||||
this.dependentResources = [
|
||||
{
|
||||
model: new JobTemplateModel(),
|
||||
params: {
|
||||
project: id
|
||||
}
|
||||
},
|
||||
{
|
||||
model: new WorkflowJobTemplateNodeModel(),
|
||||
params: {
|
||||
unified_job_template: id
|
||||
}
|
||||
},
|
||||
{
|
||||
model: new InventorySourceModel(),
|
||||
params: {
|
||||
source_project: id
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
function ProjectModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'projects');
|
||||
|
||||
this.Constructor = ProjectModel;
|
||||
this.setDependentResources = setDependentResources.bind(this);
|
||||
this.label = ModelsStrings.get('labels.PROJECT');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function ProjectModelLoader (
|
||||
_BaseModel_,
|
||||
_JobTemplateModel_,
|
||||
_WorkflowJobTemplateNodeModel_,
|
||||
_InventorySourceModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
JobTemplateModel = _JobTemplateModel_;
|
||||
WorkflowJobTemplateNodeModel = _WorkflowJobTemplateNodeModel_;
|
||||
InventorySourceModel = _InventorySourceModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return ProjectModel;
|
||||
}
|
||||
|
||||
ProjectModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'JobTemplateModel',
|
||||
'WorkflowJobTemplateNodeModel',
|
||||
'InventorySourceModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default ProjectModelLoader;
|
||||
28
awx/ui/client/lib/models/WorkflowJobTemplateNode.js
Normal file
28
awx/ui/client/lib/models/WorkflowJobTemplateNode.js
Normal file
@@ -0,0 +1,28 @@
|
||||
let BaseModel;
|
||||
let ModelsStrings;
|
||||
|
||||
function WorkflowJobTemplateNodeModel (method, resource, graft) {
|
||||
BaseModel.call(this, 'workflow_job_template_nodes');
|
||||
|
||||
this.Constructor = WorkflowJobTemplateNodeModel;
|
||||
this.label = ModelsStrings.get('labels.WORKFLOW_JOB_TEMPLATE_NODE');
|
||||
|
||||
return this.create(method, resource, graft);
|
||||
}
|
||||
|
||||
function WorkflowJobTemplateNodeModelLoader (
|
||||
_BaseModel_,
|
||||
_ModelsStrings_
|
||||
) {
|
||||
BaseModel = _BaseModel_;
|
||||
ModelsStrings = _ModelsStrings_;
|
||||
|
||||
return WorkflowJobTemplateNodeModel;
|
||||
}
|
||||
|
||||
WorkflowJobTemplateNodeModelLoader.$inject = [
|
||||
'BaseModel',
|
||||
'ModelsStrings'
|
||||
];
|
||||
|
||||
export default WorkflowJobTemplateNodeModelLoader;
|
||||
@@ -6,6 +6,14 @@ import Credential from '~models/Credential';
|
||||
import CredentialType from '~models/CredentialType';
|
||||
import Me from '~models/Me';
|
||||
import Organization from '~models/Organization';
|
||||
import Project from '~models/Project';
|
||||
import JobTemplate from '~models/JobTemplate';
|
||||
import WorkflowJobTemplateNode from '~models/WorkflowJobTemplateNode';
|
||||
import InventorySource from '~models/InventorySource';
|
||||
import Inventory from '~models/Inventory';
|
||||
import InventoryScript from '~models/InventoryScript';
|
||||
|
||||
import ModelsStrings from '~models/models.strings';
|
||||
|
||||
const MODULE_NAME = 'at.lib.models';
|
||||
|
||||
@@ -18,6 +26,13 @@ angular
|
||||
.service('CredentialModel', Credential)
|
||||
.service('CredentialTypeModel', CredentialType)
|
||||
.service('MeModel', Me)
|
||||
.service('OrganizationModel', Organization);
|
||||
.service('OrganizationModel', Organization)
|
||||
.service('ProjectModel', Project)
|
||||
.service('JobTemplateModel', JobTemplate)
|
||||
.service('WorkflowJobTemplateNodeModel', WorkflowJobTemplateNode)
|
||||
.service('InventorySourceModel', InventorySource)
|
||||
.service('InventoryModel', Inventory)
|
||||
.service('InventoryScriptModel', InventoryScript)
|
||||
.service('ModelsStrings', ModelsStrings);
|
||||
|
||||
export default MODULE_NAME;
|
||||
|
||||
22
awx/ui/client/lib/models/models.strings.js
Normal file
22
awx/ui/client/lib/models/models.strings.js
Normal file
@@ -0,0 +1,22 @@
|
||||
function ModelsStrings (BaseString) {
|
||||
BaseString.call(this, 'models');
|
||||
|
||||
const { t } = this;
|
||||
const ns = this.models;
|
||||
|
||||
ns.labels = {
|
||||
CREDENTIAL: t.s('Credentials'),
|
||||
CREDENTIAL_TYPE: t.s('Credential Types'),
|
||||
INVENTORY: t.s('Inventories'),
|
||||
INVENTORY_SCRIPT: t.s('Inventory Scripts'),
|
||||
INVENTORY_SOURCE: t.s('Inventory Sources'),
|
||||
JOB_TEMPLATE: t.s('Job Templates'),
|
||||
ORGANIZATION: t.s('Organizations'),
|
||||
PROJECT: t.s('Projects'),
|
||||
WORKFLOW_JOB_TEMPLATE_NODE: t.s('Workflow Job Template Nodes')
|
||||
};
|
||||
}
|
||||
|
||||
ModelsStrings.$inject = ['BaseStringService'];
|
||||
|
||||
export default ModelsStrings;
|
||||
Reference in New Issue
Block a user