1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2026-03-22 05:09:12 +00:00

[PR #11423/864695f8 backport][stable-12] Add to_toml filter (#11438)

Add `to_toml` filter (#11423)

* Add to_toml filter

This is based heavily on the to_yaml filter, but
with a pared-down feature set.

* Protect import

* Don't quote datetime as a string

* Use Ansible error types

* Import correct error types

* Don't use AnsibleTypeError

It doesn't seem to be available on older Ansible
core versions.

* Fix antsibull-nox errors

* Install dependencies for to_toml integration test



* Reduce author list to main contributor



* Update version added for to_toml



* Use AnsibleError for missing import



* Use AnsibleFilterError for runtime type check



* Move common code to plugin_utils/_tags.py

* Mark module util as private



* Update BOTMETA for to_toml



* Fix typo

* Correct version number



* Use to_text for to_toml dict key conversions



* Add tomlkit requirement to docs



* Add missing import

* Add aliases for for to_toml integration test

---------


(cherry picked from commit 864695f898)

Co-authored-by: Matt Williams <matt@milliams.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
patchback[bot] 2026-01-22 07:40:51 +01:00 committed by GitHub
parent 68f2433577
commit d58777ff5e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 321 additions and 76 deletions

View file

@ -0,0 +1,5 @@
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
azp/posix/3

View file

@ -0,0 +1,84 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- hosts: localhost
gather_facts: false
vars_files:
- vaulted_vars.yml
vars:
timestamp: 2025-01-02T03:04:05Z
bar: "foobarbaz"
tasks:
- name: Convert more complex data structure (from vars file)
set_fact:
complex: "{{ foobar | community.general.to_toml }}"
complex_redact: "{{ foobar | community.general.to_toml(redact_sensitive_values=true) }}"
- assert:
that:
- complex == exp_complex
- complex_redact == exp_complex_redact
vars:
exp_complex: |
a_value = 123
a_list = ["bar", 2025-02-03T04:05:06, "Hello!", true, false]
exp_complex_redact: |
a_value = 123
a_list = ["<redacted>", 2025-02-03T04:05:06, "Hello!", true, false]
- name: Convert more complex data structure (from vars)
set_fact:
complex: "{{ data | community.general.to_toml }}"
complex_redact: "{{ data | community.general.to_toml(redact_sensitive_values=true) }}"
vars:
data:
foo: 123
bar: 1.23
baz: true
bam: foobar
bang:
- "{{ timestamp }}"
- "{{ bar }}"
- "{{ foo }}"
- when: ansible_version.full is version("2.19", "<")
assert:
that:
- complex == exp_complex
# With ansible-core 2.18 and before, the vaulted string is decrypted before it reaches the filter,
# so the redaction does not work there.
- complex_redact == exp_complex
vars:
exp_complex: |
foo = 123
bar = 1.23
baz = true
bam = "foobar"
bang = ["2025-01-02 03:04:05+00:00", "foobarbaz", "bar"]
exp_complex_redact: |
foo = 123
bar = 1.23
baz = true
bam = "foobar"
bang = ["2025-01-02 03:04:05+00:00", "foobarbaz", "bar"]
- when: ansible_version.full is version("2.19", ">=")
assert:
that:
- complex == exp_complex
- complex_redact == exp_complex_redact
vars:
exp_complex: |
foo = 123
bar = 1.23
baz = true
bam = "foobar"
bang = [2025-01-02T03:04:05Z, "foobarbaz", "bar"]
exp_complex_redact: |
foo = 123
bar = 1.23
baz = true
bam = "foobar"
bang = [2025-01-02T03:04:05Z, "foobarbaz", "<redacted>"]

View file

@ -0,0 +1 @@
secret

View file

@ -0,0 +1,3 @@
Copyright (c) Ansible Project
GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
SPDX-License-Identifier: GPL-3.0-or-later

View file

@ -0,0 +1,15 @@
#!/usr/bin/env bash
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
set -eux
source virtualenv.sh
# Requirements have to be installed prior to running ansible-playbook
# because plugins and requirements are loaded before the task runs
pip install tomlkit
ansible-playbook --vault-password-file password main.yml "$@"

View file

@ -0,0 +1,27 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
foo: !vault |
$ANSIBLE_VAULT;1.1;AES256
32336431346561346535396563363438333131636539653331376466383331663838303835353862
3536306130663166393533626530646435383938323066320a303366613035323835373030303262
35633636653362393531653961396665663965356562346538643863336562393734376234313134
3562663234326435390a376464633234373636643538353562326133316439343863373333363265
6239
foobar:
a_value: 123
a_list:
- !vault |
$ANSIBLE_VAULT;1.1;AES256
32336431346561346535396563363438333131636539653331376466383331663838303835353862
3536306130663166393533626530646435383938323066320a303366613035323835373030303262
35633636653362393531653961396665663965356562346538643863336562393734376234313134
3562663234326435390a376464633234373636643538353562326133316439343863373333363265
6239
- 2025-02-03 04:05:06
- Hello!
- true
- false