У нас принято использовать в переменных lookup плагин для доступа к переменным из волт. Пример
kafka_server_username: "{{ lookup('community.hashi_vault.vault_kv2_get', vault_secret_path ~ '/kafka/env', engine_mount_point=vault_mount, token=vault_token, url=vault_url).secret['kafka_server_username'] }}"
Помним что данный плагин всегда выполняется на control plane хосте, а не на конечном узле, как например либой ansible модуль. Если молекула у нас запускается в docker. Тут будет проблема доступа до контейнера vault. Дело в том, что в контейнере с раннером, внутри которого запускаются контейнеры с хостами под полекула тесты доступа до ip адреса волт контейнера у нас нет. Получим ошибку timeout.
Проблему можно решить, если у нас проброшен docker.sock. Сначала определяем динамически docker GW так:
export MOLECULE_VAULT_URL="http://$(python3 -c "
data = open('/proc/net/route').readlines()
for line in data:
parts = line.split()
if parts[1] == '00000000': # default route
gw = int(parts[2], 16)
print(f'{gw&0xff}.{(gw>>8)&0xff}.{(gw>>16)&0xff}.{(gw>>24)&0xff}')
break
"):8200"
Это можно выполнить в
before_script в сиай, который запускает молекула.Затем используем эту переменную в тестах, например:
vault_url: "{{ lookup('env', 'MOLECULE_VAULT_URL') | default('http://172.17.0.1:8200') }}"
Решить подобным образом проблему с доступность, если у нас dind не получится, там еще один сетевой слой. В таком случае лучше вообще не использовать lookup, а читать переменные через модуль в самих тасках.
#molecule