mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
add static facility and apply to register (#49737)
* add static facility and apply to register * added warning * added test for templated register * test register 'static' status * rely on subshell to deal with quote context * use corrects pb for test * bring constants back cause new code in devel
This commit is contained in:
parent
ffac260c66
commit
be776daefe
7 changed files with 29 additions and 1 deletions
2
changelogs/fragments/static_attributes.yml
Normal file
2
changelogs/fragments/static_attributes.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- add facility for playbook attributes that are not templatable, i.e register
|
|
@ -41,6 +41,7 @@ class Attribute:
|
||||||
alias=None,
|
alias=None,
|
||||||
extend=False,
|
extend=False,
|
||||||
prepend=False,
|
prepend=False,
|
||||||
|
static=False,
|
||||||
):
|
):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -86,6 +87,7 @@ class Attribute:
|
||||||
self.alias = alias
|
self.alias = alias
|
||||||
self.extend = extend
|
self.extend = extend
|
||||||
self.prepend = prepend
|
self.prepend = prepend
|
||||||
|
self.static = static
|
||||||
|
|
||||||
if default is not None and self.isa in _CONTAINERS and not callable(default):
|
if default is not None and self.isa in _CONTAINERS and not callable(default):
|
||||||
raise TypeError('defaults for FieldAttribute may not be mutable, please provide a callable instead')
|
raise TypeError('defaults for FieldAttribute may not be mutable, please provide a callable instead')
|
||||||
|
|
|
@ -14,6 +14,7 @@ from functools import partial
|
||||||
from jinja2.exceptions import UndefinedError
|
from jinja2.exceptions import UndefinedError
|
||||||
|
|
||||||
from ansible import constants as C
|
from ansible import constants as C
|
||||||
|
|
||||||
from ansible.module_utils.six import iteritems, string_types, with_metaclass
|
from ansible.module_utils.six import iteritems, string_types, with_metaclass
|
||||||
from ansible.module_utils.parsing.convert_bool import boolean
|
from ansible.module_utils.parsing.convert_bool import boolean
|
||||||
from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable, AnsibleAssertionError
|
from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable, AnsibleAssertionError
|
||||||
|
@ -350,6 +351,13 @@ class FieldAttributeBase(with_metaclass(BaseMeta, object)):
|
||||||
|
|
||||||
for (name, attribute) in iteritems(self._valid_attrs):
|
for (name, attribute) in iteritems(self._valid_attrs):
|
||||||
|
|
||||||
|
if attribute.static:
|
||||||
|
value = getattr(self, name)
|
||||||
|
if templar.is_template(value):
|
||||||
|
display.warning('"%s" is not templatable, but we found: %s, '
|
||||||
|
'it will not be templated and will be used "as is".' % (name, value))
|
||||||
|
continue
|
||||||
|
|
||||||
if getattr(self, name) is None:
|
if getattr(self, name) is None:
|
||||||
if not attribute.required:
|
if not attribute.required:
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -80,7 +80,7 @@ class Task(Base, Conditional, Taggable, Become):
|
||||||
_loop_control = FieldAttribute(isa='class', class_type=LoopControl, inherit=False)
|
_loop_control = FieldAttribute(isa='class', class_type=LoopControl, inherit=False)
|
||||||
_notify = FieldAttribute(isa='list')
|
_notify = FieldAttribute(isa='list')
|
||||||
_poll = FieldAttribute(isa='int', default=10)
|
_poll = FieldAttribute(isa='int', default=10)
|
||||||
_register = FieldAttribute(isa='string')
|
_register = FieldAttribute(isa='string', static=True)
|
||||||
_retries = FieldAttribute(isa='int', default=3)
|
_retries = FieldAttribute(isa='int', default=3)
|
||||||
_until = FieldAttribute(isa='list', default=list)
|
_until = FieldAttribute(isa='list', default=list)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
- hosts: testhost
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
- name: template in register warns, but no template should not
|
||||||
|
debug: msg=unimportant
|
||||||
|
register: thisshouldnotwarn
|
|
@ -3,3 +3,5 @@
|
||||||
set -eux
|
set -eux
|
||||||
|
|
||||||
ansible-playbook test_templating_settings.yml -i ../../inventory -v "$@"
|
ansible-playbook test_templating_settings.yml -i ../../inventory -v "$@"
|
||||||
|
ansible-playbook warn_on_register.yml -i ../../inventory -v "$@" 2>&1| grep 'is not templatable, but we found'
|
||||||
|
[ "$(ansible-playbook dont_warn_register.yml -i ../../inventory -v "$@" 2>&1| grep -c 'is not templatable, but we found')" == "0" ]
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
- hosts: testhost
|
||||||
|
gather_facts: false
|
||||||
|
vars:
|
||||||
|
thisshouldwarn: noreally
|
||||||
|
tasks:
|
||||||
|
- name: template in register warns
|
||||||
|
debug: msg=unimportant
|
||||||
|
register: '{{ thisshouldwarn }}'
|
Loading…
Reference in a new issue