【问题标题】:Ansible/Jinja: how to convert number to binary formatAnsible/Jinja:如何将数字转换为二进制格式
【发布时间】:2018-07-11 10:38:26
【问题描述】:

我需要生成一个随机的 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 对其进行编码,但不知道如何将数字转换为二进制格式。

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    编写一个简单的过滤器插件 (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 }}"
    

    【讨论】:

    • 返回b'O6hpZnFPlYjganye778Ydg==',知道如何重新输入吗?
    • 我不明白你的意思。 {{ 16 | binary_random_b64_encoded | type_debug }}"msg": "str"
    • .decode('ascii') 添加到base64.b64encode 完成了这项工作。
    • 哦,Python 2 和 3 之间有区别...更新了。
    猜你喜欢
    • 2020-01-04
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2011-08-12
    • 2013-01-27
    • 2021-01-20
    相关资源
    最近更新 更多