Вот рекурсивный и итеративный способ сделать это. Итеративный немного быстрее в зависимости от количества выполнения.
def base62_encode_r(dec):
s = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
return s[dec] if dec < 62 else base62_encode_r(dec / 62) + s[dec % 62]
print base62_encode_r(2347878234)
def base62_encode_i(dec):
s = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ret = ''
while dec > 0:
ret = s[dec % 62] + ret
dec /= 62
return ret
print base62_encode_i(2347878234)
def base62_decode_r(b62):
s = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
if len(b62) == 1:
return s.index(b62)
x = base62_decode_r(b62[:-1]) * 62 + s.index(b62[-1:]) % 62
return x
print base62_decode_r("2yTsnM")
def base62_decode_i(b62):
s = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ret = 0
for i in xrange(len(b62)-1,-1,-1):
ret = ret + s.index(b62[i]) * (62**(len(b62)-i-1))
return ret
print base62_decode_i("2yTsnM")
if __name__ == '__main__':
import timeit
print(timeit.timeit(stmt="base62_encode_r(2347878234)", setup="from __main__ import base62_encode_r", number=100000))
print(timeit.timeit(stmt="base62_encode_i(2347878234)", setup="from __main__ import base62_encode_i", number=100000))
print(timeit.timeit(stmt="base62_decode_r('2yTsnM')", setup="from __main__ import base62_decode_r", number=100000))
print(timeit.timeit(stmt="base62_decode_i('2yTsnM')", setup="from __main__ import base62_decode_i", number=100000))
0.270266867033
0.260915645986
0.344734796766
0.311662500262
Вариант может быть условно include_vars . (Только vars / main.yml загружается автоматически.)
Импортировать tasks / vars.yml в качестве первой задачи в tasks / main.yml
- import_tasks: vars.yml
и создать tasks / vars.yml
- include_vars: main_R1.yaml
when: ansible_hostname == "198.51.100.2"
- include_vars: main_R2.yaml
when: ansible_hostname == "198.51.100.3"
Более гибким вариантом будет сопоставление таких хостов и файлов
my_host_vars:
- {host: "198.51.100.2", vars: "main_R2.yaml"}
- {host: "198.51.100.3", vars: "main_R3.yaml"}
и include_vars в цикле в task / vars.yml
[ 113]Если вы можете переименовывать и перемещать файлы var "Предпочтительной практикой в Ansible является" Разделение данных, относящихся к хосту и группе . Необходимо понимать довольно сложный приоритет переменной: куда мне поместить переменную? .