Eu sou novo no Ansible, mas preciso manter um conjunto de playbooks, que correspondem aos serviços a serem configurados em um determinado ambiente. Eles precisam receber uma porta, certificados etc. Isso resulta em muitos arquivos com listas essencialmente sempre com os mesmos nomes e uma atribuição a eles.
Em muitos casos, acho que posso reutilizar facilmente o service_name como variável, mas ao mapear para IPs, portas ou outros identificadores numéricos, ainda não descobri uma maneira de atribuir deterministicamente a eles números diferentes de uma maneira que seja reproduzível e, de preferência, permaneça o mesmo quando novos serviços são adicionados. Eu considerei usar um banco de dados SQLite para armazenar os serviços e gerar os valores de seus IDs, mas não tenho idéia de como integrá-lo ao Ansible.
Presumo que atribuir números de porta crescentes não é algo totalmente novo; é algo que muitos administradores de sistemas usam diariamente, portanto, deve haver alguma maneira de fazer isso.
Edit : Adicionamos diretamente os números de porta, etc., group_vars/all.yml
assim:
ports:
service1:1024
service2:1025
service3:1026
O inventário é gerado automaticamente, pois criamos cadeias adicionais (BSD) e depende das funções que serão executadas.
group_vars
ou adicionando variáveis diretamente nos arquivos de inventário. Também não está claro como o seu inventário está sendo gerado.Respostas:
Isenção de responsabilidade: não estou usando o Ansible.
O que eu faria é usar um número "previsível" aleatório. De acordo com o documento Ansible, você pode propagar o gerador de números aleatórios:
Portanto, no seu caso, para um número de porta (presumo sem privilégios), eu usaria uma variável com algo como:
Max em 32767 para evitar conflitos com qualquer porta iniciada pelo cliente (consulte Porta Efêmera) para obter o motivo).
fonte