Ansible / Jinja:如何将数字转换为二进制格式

时间:2018-07-11 10:38:27

标签: ansible jinja2

我需要生成一个随机的128位数字,并进行b64编码的二进制表示。

示例:

vagrant@ubuntu1804:~$ consul keygen
TUlzi8BWwPQR1zyjR1TiAQ==

采用b64解码格式:

vagrant@ubuntu1804:~$ consul keygen | base64 -d|hexdump -C
00000000  46 b8 72 4b ce 9a 2a 14  09 7b 16 51 99 1b 39 e0  |F�rK�.*..{.Q..9�|
00000010

我可以使用random过滤器生成大量数字:

{{ 340282366920938463463374607431768211456 | random }}

我知道我可以用b64encode对其进行编码,但是不知道如何将数字转换为二进制格式。

1 个答案:

答案 0 :(得分:2)

编写一个简单的过滤器插件(filter_plugins/myfilters.py来生成所需的内容,而不是进行转换(这是不可能的,因为您无法使用本机Ansible数据结构存储/处理二进制文件):

import os
import base64


class FilterModule(object):
    def filters(self):
        return {
            'binary_random_b64_encoded': self.binary_random_b64_encoded
        }

    def binary_random_b64_encoded(self, size):
        return base64.b64encode(os.urandom(size)).decode('ascii')

并使用它(具有所需的二进制数据大小):

- debug:
    msg: "{{ 16 | binary_random_b64_encoded }}"