Merge pull request #11519 from bcoca/human_readable
new human_readable filter to transform bits and bytes into cake
This commit is contained in:
commit
9dc5607730
2 changed files with 37 additions and 0 deletions
|
@ -101,6 +101,32 @@ def inversepower(x, base=2):
|
||||||
raise errors.AnsibleFilterError('root() can only be used on numbers: %s' % str(e))
|
raise errors.AnsibleFilterError('root() can only be used on numbers: %s' % str(e))
|
||||||
|
|
||||||
|
|
||||||
|
def human_readable(size, isbits=False, unit=None):
|
||||||
|
|
||||||
|
base = 'bits' if isbits else 'Bytes'
|
||||||
|
suffix = ''
|
||||||
|
|
||||||
|
ranges = (
|
||||||
|
(1<<70L, 'Z'),
|
||||||
|
(1<<60L, 'E'),
|
||||||
|
(1<<50L, 'P'),
|
||||||
|
(1<<40L, 'T'),
|
||||||
|
(1<<30L, 'G'),
|
||||||
|
(1<<20L, 'M'),
|
||||||
|
(1<<10L, 'K'),
|
||||||
|
(1, base)
|
||||||
|
)
|
||||||
|
|
||||||
|
for limit, suffix in ranges:
|
||||||
|
if (unit is None and size >= limit) or \
|
||||||
|
unit is not None and unit.upper() == suffix:
|
||||||
|
break
|
||||||
|
|
||||||
|
if limit != 1:
|
||||||
|
suffix += base[0]
|
||||||
|
|
||||||
|
return '%.2f %s' % (float(size)/ limit, suffix)
|
||||||
|
|
||||||
class FilterModule(object):
|
class FilterModule(object):
|
||||||
''' Ansible math jinja2 filters '''
|
''' Ansible math jinja2 filters '''
|
||||||
|
|
||||||
|
@ -123,4 +149,7 @@ class FilterModule(object):
|
||||||
'symmetric_difference': symmetric_difference,
|
'symmetric_difference': symmetric_difference,
|
||||||
'union': union,
|
'union': union,
|
||||||
|
|
||||||
|
# computer theory
|
||||||
|
'human_readable' : human_readable,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,3 +41,11 @@
|
||||||
that:
|
that:
|
||||||
- 'diff_result.stdout == ""'
|
- 'diff_result.stdout == ""'
|
||||||
|
|
||||||
|
- name: Verify human_readable
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- '"10.00 KB" == 10240|human_readable'
|
||||||
|
- '"97.66 MB" == 102400000|human_readable'
|
||||||
|
- '"0.10 GB" == 102400000|human_readable(unit="G")'
|
||||||
|
- '"0.10 Gb" == 102400000|human_readable(isbits=True, unit="G")'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue