Ansible-vault och Nornir
Det går att kombinera hemliga variablar med hjälp av Ansible vault i ett Nornir-jobb.
De synliga, icke hemliga variablarna placerar man som vanligt i inventory/hosts.yaml och inventory/groups.yaml. Hemliga variablar kan man sedan placera i inventory/secrets.yaml.
Man kommer sedan att kombinera dessa när jobbet körs, så det är viktigt att hierarkin är exakt lika i samtliga filer.
Har man exempelvis följande i hosts.yaml:
nxos:
data:
routed_underlay:
ISIS_NET: 49.1337.0000.0000.0001.00
Och ett lösenord ska användas för ISIS som anropas av Python-jobbet på samma ställe ska då secrets.yaml se ut såhär:
nxos:
data:
routed_underlay:
ISIS_PASSWORD: s0000pers3333cret
För att sedan använda sig av ansible vault behövs följande:
Kryptera filen med ansible-vault encrypt secrets.yaml. Redigering med edit eller decrypt (glöm inte encrypt efteråt).
Skapa en lokal fil på servern där krypteringslösenordet finns, använd chmod 400 på den.
Följande moduler behövs:
from ansible.parsing.vault import VaultLib, VaultSecret
from ansible.constants import DEFAULT_VAULT_ID_MATCH
from ansible.parsing.dataloader import DataLoader
Anropa sedan i jobbet:
def load_vault_password(path="~/.ansible_losen"):
path = Path(path).expanduser()
return path.read_bytes().strip()
I def main() behövs följande för att låsa upp filen och använda den:
vault_password = load_vault_password()
loader = DataLoader()
vault = VaultLib([(DEFAULT_VAULT_ID_MATCH, VaultSecret(vault_password))])
loader.set_vault_secrets(vault.secrets)
data = loader.load_from_file("inventory/secrets.yaml")
for host, host_data in data.items():
if host in nr.inventory.hosts:
nr.inventory.hosts[host].data.update(host_data)