Merge pull request #2234 from akvadrako/nice-yaml-and-json
add to_nice_yaml|json filters
This commit is contained in:
commit
e83819599a
2 changed files with 94 additions and 0 deletions
|
@ -18,14 +18,27 @@
|
|||
import json
|
||||
import yaml
|
||||
|
||||
def to_nice_yaml(*a, **kw):
|
||||
'''Make verbose, human readable yaml'''
|
||||
return yaml.safe_dump(*a, indent=4, allow_unicode=True, default_flow_style=False, **kw)
|
||||
|
||||
def to_nice_json(*a, **kw):
|
||||
'''Make verbose, human readable JSON'''
|
||||
return json.dumps(*a, indent=4, sort_keys=True, **kw)
|
||||
|
||||
class FilterModule(object):
|
||||
''' Ansible core jinja2 filters '''
|
||||
|
||||
def filters(self):
|
||||
return {
|
||||
# json
|
||||
'to_json': json.dumps,
|
||||
'to_nice_json': to_nice_json,
|
||||
'from_json': json.loads,
|
||||
|
||||
# yaml
|
||||
'to_yaml': yaml.safe_dump,
|
||||
'to_nice_yaml': to_nice_yaml,
|
||||
'from_yaml': yaml.safe_load,
|
||||
}
|
||||
|
||||
|
|
81
test/TestFilters.py
Normal file
81
test/TestFilters.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
'''
|
||||
Test bundled filters
|
||||
'''
|
||||
|
||||
import unittest, tempfile, shutil
|
||||
from ansible import playbook, inventory, callbacks
|
||||
|
||||
INVENTORY = inventory.Inventory(['localhost'])
|
||||
|
||||
BOOK = '''
|
||||
- hosts: localhost
|
||||
vars:
|
||||
var: { a: [1,2,3] }
|
||||
tasks:
|
||||
- template: src=%s dest=%s
|
||||
'''
|
||||
|
||||
SRC = '''
|
||||
-
|
||||
{{ var|to_json }}
|
||||
-
|
||||
{{ var|to_nice_json }}
|
||||
-
|
||||
{{ var|to_yaml }}
|
||||
-
|
||||
{{ var|to_nice_yaml }}
|
||||
'''
|
||||
|
||||
DEST = '''
|
||||
-
|
||||
{"a": [1, 2, 3]}
|
||||
-
|
||||
{
|
||||
"a": [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]
|
||||
}
|
||||
-
|
||||
a: [1, 2, 3]
|
||||
|
||||
-
|
||||
a:
|
||||
- 1
|
||||
- 2
|
||||
- 3
|
||||
'''
|
||||
|
||||
class TestFilters(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.tmpdir = tempfile.mkdtemp(dir='/tmp')
|
||||
|
||||
def tearDown(self):
|
||||
shutil.rmtree(self.tmpdir)
|
||||
|
||||
def temp(self, name, data=''):
|
||||
'''write a temporary file and return the name'''
|
||||
name = self.tmpdir + '/' + name
|
||||
with open(name, 'w') as f:
|
||||
f.write(data)
|
||||
return name
|
||||
|
||||
def test_filters(self):
|
||||
src = self.temp('src.j2', SRC)
|
||||
dest = self.temp('dest.txt')
|
||||
book = self.temp('book', BOOK % (src, dest))
|
||||
|
||||
playbook.PlayBook(
|
||||
playbook = book,
|
||||
inventory = INVENTORY,
|
||||
transport = 'local',
|
||||
callbacks = callbacks.PlaybookCallbacks(),
|
||||
runner_callbacks = callbacks.DefaultRunnerCallbacks(),
|
||||
stats = callbacks.AggregateStats(),
|
||||
).run()
|
||||
|
||||
out = open(dest).read()
|
||||
self.assertEqual(DEST, out)
|
||||
|
Loading…
Reference in a new issue