mirror of
https://github.com/ansible/awx.git
synced 2026-03-11 14:39:30 -02:30
add inventory field to inventory update
This commit is contained in:
@@ -2172,7 +2172,7 @@ class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSeri
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = InventoryUpdate
|
model = InventoryUpdate
|
||||||
fields = ('*', 'inventory_source', 'license_error', 'source_project_update',
|
fields = ('*', 'inventory', 'inventory_source', 'license_error', 'source_project_update',
|
||||||
'-controller_node',)
|
'-controller_node',)
|
||||||
|
|
||||||
def get_related(self, obj):
|
def get_related(self, obj):
|
||||||
@@ -2193,8 +2193,12 @@ class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSeri
|
|||||||
if obj.source_project_update_id:
|
if obj.source_project_update_id:
|
||||||
res['source_project_update'] = self.reverse('api:project_update_detail',
|
res['source_project_update'] = self.reverse('api:project_update_detail',
|
||||||
kwargs={'pk': obj.source_project_update.pk})
|
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:
|
if self.version > 1:
|
||||||
res['credentials'] = self.reverse('api:inventory_update_credentials_list', kwargs={'pk': obj.pk})
|
res['credentials'] = self.reverse('api:inventory_update_credentials_list', kwargs={'pk': obj.pk})
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -1420,7 +1420,7 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions, RelatedJobsMix
|
|||||||
@classmethod
|
@classmethod
|
||||||
def _get_unified_job_field_names(cls):
|
def _get_unified_job_field_names(cls):
|
||||||
return set(f.name for f in InventorySourceOptions._meta.fields) | set(
|
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):
|
def save(self, *args, **kwargs):
|
||||||
@@ -1599,6 +1599,13 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions, JobNotificationMixin,
|
|||||||
class Meta:
|
class Meta:
|
||||||
app_label = 'main'
|
app_label = 'main'
|
||||||
|
|
||||||
|
inventory = models.ForeignKey(
|
||||||
|
'Inventory',
|
||||||
|
related_name='inventory_updates',
|
||||||
|
null=True,
|
||||||
|
default=None,
|
||||||
|
on_delete=models.DO_NOTHING,
|
||||||
|
)
|
||||||
inventory_source = models.ForeignKey(
|
inventory_source = models.ForeignKey(
|
||||||
'InventorySource',
|
'InventorySource',
|
||||||
related_name='inventory_updates',
|
related_name='inventory_updates',
|
||||||
|
|||||||
@@ -133,51 +133,6 @@ function getJobTemplateDetails () {
|
|||||||
return { label, link, value, tooltip };
|
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 () {
|
function getInventorySourceDetails () {
|
||||||
if (!resource.model.has('summary_fields.inventory_source.source')) {
|
if (!resource.model.has('summary_fields.inventory_source.source')) {
|
||||||
return null;
|
return null;
|
||||||
@@ -726,7 +681,6 @@ function JobDetailsController (
|
|||||||
vm.skipTags = getSkipTagDetails();
|
vm.skipTags = getSkipTagDetails();
|
||||||
vm.extraVars = getExtraVarsDetails();
|
vm.extraVars = getExtraVarsDetails();
|
||||||
vm.labels = getLabelDetails();
|
vm.labels = getLabelDetails();
|
||||||
vm.inventoryJobName = getInventoryJobNameDetails();
|
|
||||||
vm.inventorySource = getInventorySourceDetails();
|
vm.inventorySource = getInventorySourceDetails();
|
||||||
vm.overwrite = getOverwriteDetails();
|
vm.overwrite = getOverwriteDetails();
|
||||||
vm.overwriteVars = getOverwriteVarsDetails();
|
vm.overwriteVars = getOverwriteVarsDetails();
|
||||||
|
|||||||
@@ -41,18 +41,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- LEFT PANE DETAILS GROUP -->
|
<!-- 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 -->
|
<!-- STATUS DETAIL -->
|
||||||
<div class="JobResults-resultRow">
|
<div class="JobResults-resultRow">
|
||||||
<label class="JobResults-resultRowLabel">{{ vm.status.label }}</label>
|
<label class="JobResults-resultRowLabel">{{ vm.status.label }}</label>
|
||||||
|
|||||||
@@ -81,6 +81,10 @@ export default function BuildAnchor($log, $filter) {
|
|||||||
case 'label':
|
case 'label':
|
||||||
url = null;
|
url = null;
|
||||||
break;
|
break;
|
||||||
|
case 'inventory_source':
|
||||||
|
const inventoryId = _.get(obj, 'inventory', '').split('-').reverse()[0];
|
||||||
|
url += `inventories/inventory/${inventoryId}/inventory_sources/edit/${obj.id}`;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
url += resource + 's/' + obj.id + '/';
|
url += resource + 's/' + obj.id + '/';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_EXPIRATION` to `SESSION_COOKIE_AGE`.
|
||||||
* Changed the name of the session length setting from `AUTH_TOKEN_PER_USER` to `SESSIONS_PER_USER`.
|
* 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)]
|
* 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
|
3.2.0
|
||||||
=====
|
=====
|
||||||
|
|||||||
Reference in New Issue
Block a user