我需要生成一个随机的 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
对其进行编码,但不知道如何将数字转换为二进制格式。
最佳答案
不是转换(这是不可能的,因为您不能使用 native Ansible 数据结构存储/处理二进制文件),而是编写一个简单的过滤器插件 (filter_plugins/myfilters.py
) 来生成内容你想要:
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 }}"
关于Ansible/神社 : how to convert number to binary format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51283345/