mirror of
https://github.com/ansible/awx.git
synced 2026-03-02 09:18:48 -03:30
Merge pull request #6382 from chrismeyersfsu/fix-4514
support vmware via source_vars
This commit is contained in:
@@ -1094,44 +1094,50 @@ class InventorySourceOptions(BaseModel):
|
|||||||
|
|
||||||
def clean_instance_filters(self):
|
def clean_instance_filters(self):
|
||||||
instance_filters = unicode(self.instance_filters or '')
|
instance_filters = unicode(self.instance_filters or '')
|
||||||
if self.source != 'ec2':
|
if self.source == 'ec2':
|
||||||
|
invalid_filters = []
|
||||||
|
instance_filter_re = re.compile(r'^((tag:.+)|([a-z][a-z\.-]*[a-z]))=.*$')
|
||||||
|
for instance_filter in instance_filters.split(','):
|
||||||
|
instance_filter = instance_filter.strip()
|
||||||
|
if not instance_filter:
|
||||||
|
continue
|
||||||
|
if not instance_filter_re.match(instance_filter):
|
||||||
|
invalid_filters.append(instance_filter)
|
||||||
|
continue
|
||||||
|
instance_filter_name = instance_filter.split('=', 1)[0]
|
||||||
|
if instance_filter_name.startswith('tag:'):
|
||||||
|
continue
|
||||||
|
if instance_filter_name not in self.INSTANCE_FILTER_NAMES:
|
||||||
|
invalid_filters.append(instance_filter)
|
||||||
|
if invalid_filters:
|
||||||
|
raise ValidationError(_('Invalid filter expression: %(filter)s') %
|
||||||
|
{'filter': ', '.join(invalid_filters)})
|
||||||
|
return instance_filters
|
||||||
|
elif self.source == 'vmware':
|
||||||
|
return instance_filters
|
||||||
|
else:
|
||||||
return ''
|
return ''
|
||||||
invalid_filters = []
|
|
||||||
instance_filter_re = re.compile(r'^((tag:.+)|([a-z][a-z\.-]*[a-z]))=.*$')
|
|
||||||
for instance_filter in instance_filters.split(','):
|
|
||||||
instance_filter = instance_filter.strip()
|
|
||||||
if not instance_filter:
|
|
||||||
continue
|
|
||||||
if not instance_filter_re.match(instance_filter):
|
|
||||||
invalid_filters.append(instance_filter)
|
|
||||||
continue
|
|
||||||
instance_filter_name = instance_filter.split('=', 1)[0]
|
|
||||||
if instance_filter_name.startswith('tag:'):
|
|
||||||
continue
|
|
||||||
if instance_filter_name not in self.INSTANCE_FILTER_NAMES:
|
|
||||||
invalid_filters.append(instance_filter)
|
|
||||||
if invalid_filters:
|
|
||||||
raise ValidationError(_('Invalid filter expression: %(filter)s') %
|
|
||||||
{'filter': ', '.join(invalid_filters)})
|
|
||||||
return instance_filters
|
|
||||||
|
|
||||||
def clean_group_by(self):
|
def clean_group_by(self):
|
||||||
group_by = unicode(self.group_by or '')
|
group_by = unicode(self.group_by or '')
|
||||||
if self.source != 'ec2':
|
if self.source == 'ec2':
|
||||||
|
get_choices = getattr(self, 'get_%s_group_by_choices' % self.source)
|
||||||
|
valid_choices = [x[0] for x in get_choices()]
|
||||||
|
choice_transform = lambda x: x.strip().lower()
|
||||||
|
valid_choices = [choice_transform(x) for x in valid_choices]
|
||||||
|
choices = [choice_transform(x) for x in group_by.split(',') if x.strip()]
|
||||||
|
invalid_choices = []
|
||||||
|
for c in choices:
|
||||||
|
if c not in valid_choices and c not in invalid_choices:
|
||||||
|
invalid_choices.append(c)
|
||||||
|
if invalid_choices:
|
||||||
|
raise ValidationError(_('Invalid group by choice: %(choice)s') %
|
||||||
|
{'choice': ', '.join(invalid_choices)})
|
||||||
|
return ','.join(choices)
|
||||||
|
elif self.source == 'vmware':
|
||||||
|
return group_by
|
||||||
|
else:
|
||||||
return ''
|
return ''
|
||||||
get_choices = getattr(self, 'get_%s_group_by_choices' % self.source)
|
|
||||||
valid_choices = [x[0] for x in get_choices()]
|
|
||||||
choice_transform = lambda x: x.strip().lower()
|
|
||||||
valid_choices = [choice_transform(x) for x in valid_choices]
|
|
||||||
choices = [choice_transform(x) for x in group_by.split(',') if x.strip()]
|
|
||||||
invalid_choices = []
|
|
||||||
for c in choices:
|
|
||||||
if c not in valid_choices and c not in invalid_choices:
|
|
||||||
invalid_choices.append(c)
|
|
||||||
if invalid_choices:
|
|
||||||
raise ValidationError(_('Invalid group by choice: %(choice)s') %
|
|
||||||
{'choice': ', '.join(invalid_choices)})
|
|
||||||
return ','.join(choices)
|
|
||||||
|
|
||||||
|
|
||||||
class InventorySource(UnifiedJobTemplate, InventorySourceOptions):
|
class InventorySource(UnifiedJobTemplate, InventorySourceOptions):
|
||||||
|
|||||||
@@ -1598,7 +1598,7 @@ class RunInventoryUpdate(BaseTask):
|
|||||||
if inventory_update.instance_filters:
|
if inventory_update.instance_filters:
|
||||||
vmware_opts.setdefault('host_filters', inventory_update.instance_filters)
|
vmware_opts.setdefault('host_filters', inventory_update.instance_filters)
|
||||||
if inventory_update.group_by:
|
if inventory_update.group_by:
|
||||||
vmware_opts.setdefault('groupby_patterns', inventory_update.groupby_patterns)
|
vmware_opts.setdefault('groupby_patterns', inventory_update.group_by)
|
||||||
|
|
||||||
for k,v in vmware_opts.items():
|
for k,v in vmware_opts.items():
|
||||||
cp.set(section, k, unicode(v))
|
cp.set(section, k, unicode(v))
|
||||||
|
|||||||
Reference in New Issue
Block a user