add inventory field to inventory update

This commit is contained in:
Jake McDermott 2018-07-17 00:38:40 -04:00
parent a955b3f947
commit a968a44afb
No known key found for this signature in database
GPG Key ID: 9A6F084352C3A0B7
7 changed files with 39 additions and 60 deletions

View File

@ -2172,7 +2172,7 @@ class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSeri
class Meta:
model = InventoryUpdate
fields = ('*', 'inventory_source', 'license_error', 'source_project_update',
fields = ('*', 'inventory', 'inventory_source', 'license_error', 'source_project_update',
'-controller_node',)
def get_related(self, obj):
@ -2193,8 +2193,12 @@ class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSeri
if obj.source_project_update_id:
res['source_project_update'] = self.reverse('api:project_update_detail',
kwargs={'pk': obj.source_project_update.pk})
if obj.inventory:
res['inventory'] = self.reverse('api:inventory_detail', kwargs={'pk': obj.inventory.pk})
if self.version > 1:
res['credentials'] = self.reverse('api:inventory_update_credentials_list', kwargs={'pk': obj.pk})
return res

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.11 on 2018-07-17 03:57
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('main', '0043_v330_oauth2accesstoken_modified'),
]
operations = [
migrations.AddField(
model_name='inventoryupdate',
name='inventory',
field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='inventory_updates', to='main.Inventory'),
),
]

View File

@ -1420,7 +1420,7 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions, RelatedJobsMix
@classmethod
def _get_unified_job_field_names(cls):
return set(f.name for f in InventorySourceOptions._meta.fields) | set(
['name', 'description', 'schedule', 'credentials']
['name', 'description', 'schedule', 'credentials', 'inventory']
)
def save(self, *args, **kwargs):
@ -1599,6 +1599,13 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions, JobNotificationMixin,
class Meta:
app_label = 'main'
inventory = models.ForeignKey(
'Inventory',
related_name='inventory_updates',
null=True,
default=None,
on_delete=models.DO_NOTHING,
)
inventory_source = models.ForeignKey(
'InventorySource',
related_name='inventory_updates',

View File

@ -133,51 +133,6 @@ function getJobTemplateDetails () {
return { label, link, value, tooltip };
}
function getInventoryJobNameDetails () {
if (resource.model.get('type') !== 'inventory_update') {
return null;
}
const jobArgs = resource.model.get('job_args');
if (!jobArgs) {
return null;
}
let parsedJobArgs;
try {
parsedJobArgs = JSON.parse(jobArgs);
} catch (e) {
return null;
}
if (!Array.isArray(parsedJobArgs)) {
return null;
}
const jobArgIndex = parsedJobArgs.indexOf('--inventory-id');
const inventoryId = parsedJobArgs[jobArgIndex + 1];
if (jobArgIndex < 0) {
return null;
}
if (!Number.isInteger(parseInt(inventoryId, 10))) {
return null;
}
const name = resource.model.get('name');
const id = resource.model.get('id');
const label = strings.get('labels.NAME');
const tooltip = strings.get('tooltips.INVENTORY');
const value = `${id} - ${$filter('sanitize')(name)}`;
const link = `/#/inventories/inventory/${inventoryId}`;
return { label, link, tooltip, value };
}
function getInventorySourceDetails () {
if (!resource.model.has('summary_fields.inventory_source.source')) {
return null;
@ -726,7 +681,6 @@ function JobDetailsController (
vm.skipTags = getSkipTagDetails();
vm.extraVars = getExtraVarsDetails();
vm.labels = getLabelDetails();
vm.inventoryJobName = getInventoryJobNameDetails();
vm.inventorySource = getInventorySourceDetails();
vm.overwrite = getOverwriteDetails();
vm.overwriteVars = getOverwriteVarsDetails();

View File

@ -41,18 +41,6 @@
</div>
<!-- LEFT PANE DETAILS GROUP -->
<!-- INVENTORY JOB NAME DETAIL -->
<div class="JobResults-resultRow" ng-if="vm.inventoryJobName">
<label class="JobResults-resultRowLabel">{{ vm.inventoryJobName.label }}</label>
<div class="JobResults-resultRowText">
<a href="{{ vm.inventoryJobName.link }}"
aw-tool-tip="{{ vm.inventoryJobName.tooltip }}"
data-placement="top">
{{ vm.inventoryJobName.value }}
</a>
</div>
</div>
<!-- STATUS DETAIL -->
<div class="JobResults-resultRow">
<label class="JobResults-resultRowLabel">{{ vm.status.label }}</label>

View File

@ -81,6 +81,10 @@ export default function BuildAnchor($log, $filter) {
case 'label':
url = null;
break;
case 'inventory_source':
const inventoryId = _.get(obj, 'inventory', '').split('-').reverse()[0];
url += `inventories/inventory/${inventoryId}/inventory_sources/edit/${obj.id}`;
break;
default:
url += resource + 's/' + obj.id + '/';
}

View File

@ -74,6 +74,7 @@
* Changed the name of the session length setting from `AUTH_TOKEN_EXPIRATION` to `SESSION_COOKIE_AGE`.
* Changed the name of the session length setting from `AUTH_TOKEN_PER_USER` to `SESSIONS_PER_USER`.
* External logging now defaults to HTTPS (instead of HTTP) *unless* http:// is explicitly specified in the log aggregator hostname [[#2048](https://github.com/ansible/awx/issues/2048)]
* Added `inventory` field to inventory updates
3.2.0
=====