mirror of
https://github.com/ansible/awx.git
synced 2026-02-19 12:10:06 -03:30
Add Inventory.kind field
This commit is contained in:
@@ -23,21 +23,22 @@ class HostManager(models.Manager):
|
|||||||
return len(set(self.values_list('name', flat=True)))
|
return len(set(self.values_list('name', flat=True)))
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
"""When the Inventory this host belongs to has a `host_filter` set
|
"""When the parent instance of the host query set has a `kind` of dynamic and a `host_filter`
|
||||||
generate the QuerySet using that filter. Otherwise just return the default filter.
|
set. Use the `host_filter` to generate the queryset for the hosts.
|
||||||
"""
|
"""
|
||||||
qs = super(HostManager, self).get_queryset()
|
qs = super(HostManager, self).get_queryset()
|
||||||
if self.instance is not None:
|
if self.instance is not None:
|
||||||
if hasattr(self.instance, 'host_filter') and self.instance.host_filter is not None:
|
if hasattr(self.instance, 'kind') and self.instance.kind == 'dynamic':
|
||||||
q = DynamicFilter.query_from_string(self.instance.host_filter)
|
if hasattr(self.instance, 'host_filter') and self.instance.host_filter is not None:
|
||||||
# If we are using host_filters, disable the core_filters, this allows
|
q = DynamicFilter.query_from_string(self.instance.host_filter)
|
||||||
# us to access all of the available Host entries, not just the ones associated
|
# If we are using host_filters, disable the core_filters, this allows
|
||||||
# with a specific FK/relation.
|
# us to access all of the available Host entries, not just the ones associated
|
||||||
#
|
# with a specific FK/relation.
|
||||||
# If we don't disable this, a filter of {'inventory': self.instance} gets automatically
|
#
|
||||||
# injected by the related object mapper.
|
# If we don't disable this, a filter of {'inventory': self.instance} gets automatically
|
||||||
self.core_filters = {}
|
# injected by the related object mapper.
|
||||||
return qs.filter(q)
|
self.core_filters = {}
|
||||||
|
return qs.filter(q)
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,11 @@ class Migration(migrations.Migration):
|
|||||||
name='host_filter',
|
name='host_filter',
|
||||||
field=awx.main.fields.DynamicFilterField(default=None, help_text='Filter that will be applied to the hosts of this inventory.', null=True, blank=True),
|
field=awx.main.fields.DynamicFilterField(default=None, help_text='Filter that will be applied to the hosts of this inventory.', null=True, blank=True),
|
||||||
),
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='inventory',
|
||||||
|
name='kind',
|
||||||
|
field=models.CharField(default=b'standard', help_text='Kind of inventory being represented.', max_length=32, choices=[(b'standard', 'Hosts have a direct link to this inventory.'), (b'dynamic', 'Hosts for inventory generated using the host_filter property.')]),
|
||||||
|
),
|
||||||
|
|
||||||
# Facts
|
# Facts
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
|
|||||||
@@ -46,6 +46,11 @@ class Inventory(CommonModelNameNotUnique, ResourceMixin):
|
|||||||
an inventory source contains lists and hosts.
|
an inventory source contains lists and hosts.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
KIND_CHOICES = [
|
||||||
|
('standard', _('Hosts have a direct link to this inventory.')),
|
||||||
|
('dynamic', _('Hosts for inventory generated using the host_filter property.')),
|
||||||
|
]
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
app_label = 'main'
|
app_label = 'main'
|
||||||
verbose_name_plural = _('inventories')
|
verbose_name_plural = _('inventories')
|
||||||
@@ -103,6 +108,13 @@ class Inventory(CommonModelNameNotUnique, ResourceMixin):
|
|||||||
editable=False,
|
editable=False,
|
||||||
help_text=_('Number of external inventory sources in this inventory with failures.'),
|
help_text=_('Number of external inventory sources in this inventory with failures.'),
|
||||||
)
|
)
|
||||||
|
kind = models.CharField(
|
||||||
|
max_length=32,
|
||||||
|
choices=KIND_CHOICES,
|
||||||
|
blank=False,
|
||||||
|
default='standard',
|
||||||
|
help_text=_('Kind of inventory being represented.'),
|
||||||
|
)
|
||||||
host_filter = DynamicFilterField(
|
host_filter = DynamicFilterField(
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
|
|||||||
Reference in New Issue
Block a user