Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2.9: native types: literal_eval all the things (#68938) #69044

Merged
merged 2 commits into from May 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
13 changes: 8 additions & 5 deletions lib/ansible/template/native_helpers.py
Expand Up @@ -13,6 +13,9 @@
from jinja2._compat import text_type

from jinja2.runtime import StrictUndefined

from ansible.module_utils.common.text.converters import container_to_text
from ansible.module_utils.six import PY2
from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode


Expand Down Expand Up @@ -48,10 +51,6 @@ def ansible_native_concat(nodes):
# See https://github.com/ansible/ansible/issues/52158
# We do that only here because it is taken care of by text_type() in the else block below already.
str(out)

# short circuit literal_eval when possible
if not isinstance(out, list):
return out
else:
if isinstance(nodes, types.GeneratorType):
nodes = chain(head, nodes)
Expand All @@ -60,6 +59,10 @@ def ansible_native_concat(nodes):
out = u''.join([text_type(v) for v in nodes])

try:
return literal_eval(out)
out = literal_eval(out)
if PY2:
# ensure bytes are not returned back into Ansible from templating
out = container_to_text(out)
return out
except (ValueError, SyntaxError, MemoryError):
return out
4 changes: 2 additions & 2 deletions test/integration/targets/inventory_aws_conformance/runme.sh
Expand Up @@ -83,7 +83,7 @@ compose:
ec2_kernel: kernel_id | default("")
ec2_monitored: monitoring['state'] in ['enabled', 'pending']
ec2_monitoring_state: monitoring['state']
ec2_account_id: owner_id
ec2_account_id: owner_id | string | regex_replace('^(.*)$', '"\\1"') # work around the fact that the string filter is not reliable on native jinja
ec2_placement: placement['availability_zone']
ec2_ramdisk: ramdisk_id | default("")
ec2_reason: state_transition_reason
Expand All @@ -95,7 +95,7 @@ compose:
ec2_sourceDestCheck: source_dest_check | lower | string # butchered snake_case case not a typo.

# vars that just need ec2_ prefix
ec2_ami_launch_index: ami_launch_index | string
ec2_ami_launch_index: ami_launch_index | string | regex_replace('^(.*)$', '"\\1"') # see ec2_account_id for why this needs to be quoted
ec2_architecture: architecture
ec2_client_token: client_token
ec2_ebs_optimized: ebs_optimized
Expand Down

This file was deleted.

6 changes: 3 additions & 3 deletions test/integration/targets/jinja2_native_types/test_casting.yml
@@ -1,9 +1,9 @@
- name: cast things to other things
set_fact:
int_to_str: "{{ i_two|to_text }}"
int_to_str: "'{{ i_two }}'"
str_to_int: "{{ s_two|int }}"
dict_to_str: "{{ dict_one|to_text }}"
list_to_str: "{{ list_one|to_text }}"
dict_to_str: "'{{ dict_one }}'"
list_to_str: "'{{ list_one }}'"
int_to_bool: "{{ i_one|bool }}"
str_true_to_bool: "{{ s_true|bool }}"
str_false_to_bool: "{{ s_false|bool }}"
Expand Down
Expand Up @@ -18,7 +18,7 @@

- name: concatenate int and string
set_fact:
string_sum: "{{ [(i_one|to_text), s_two]|join('') }}"
string_sum: "'{{ [i_one, s_two]|join('') }}'"

- assert:
that:
Expand Down
2 changes: 0 additions & 2 deletions test/sanity/ignore.txt
Expand Up @@ -5984,8 +5984,6 @@ test/integration/targets/inventory_kubevirt_conformance/inventory_diff.py future
test/integration/targets/inventory_kubevirt_conformance/inventory_diff.py metaclass-boilerplate
test/integration/targets/inventory_kubevirt_conformance/server.py future-import-boilerplate
test/integration/targets/inventory_kubevirt_conformance/server.py metaclass-boilerplate
test/integration/targets/jinja2_native_types/filter_plugins/native_plugins.py future-import-boilerplate
test/integration/targets/jinja2_native_types/filter_plugins/native_plugins.py metaclass-boilerplate
test/integration/targets/lambda_policy/files/mini_http_lambda.py future-import-boilerplate
test/integration/targets/lambda_policy/files/mini_http_lambda.py metaclass-boilerplate
test/integration/targets/lookup_properties/lookup-8859-15.ini no-smart-quotes
Expand Down