O Ansible tem um componente semelhante ao PuppetDB?

7

Conheço o Puppet por experiência (limitada) e notei que no gerenciamento de configurações agora há uma forte tendência em direção ao Ansible.

Por um lado, entendo que o Ansible não requer um agente, porque faz uso inteligente dele ssh.

Por outro lado, estas são características que gostaram do Puppet:

  • acesso ao estado e histórico de configuração em todo o sistema (PuppetDB) via API REST
  • capacidade de manter backups de arquivos sobrescritos (filebuckets)
  • capacidade de criptografar parte das configurações do Hiera ( .eyaml)

Entre eles, o PuppetDB me parece o mais importante e útil (por exemplo, para integração com outras ferramentas). Portanto, minha pergunta é a seguinte: O Ansible tem algo parecido com o PuppetDB, isto é, um componente que oferece uma API na qual poderia, por exemplo, ser perguntado "Quais pacotes estão instalados no host x ?" ou "Em quais hosts o pacote y está instalado?"

(Esta questão foi migrada do StackOverflow ).

ATUALIZAÇÃO A desvantagem significativa do Puppet é a minha experiência até agora: não tanto o fato de exigir um agente (pelo que vi, o uso do Ansible no Python também introduz um tipo de agente na forma de um intérprete do Python ;-), mas que deseja que seu agente aja como rootúnico e sempre.

Drux
fonte
Curioso: como você espera que uma ferramenta como Puppet (ou Chef ou CFEngine) seja capaz de fazer o que faz sem funcionar como root? Ele substitui a necessidade de um SA fazer login e fazer as coisas manualmente, portanto, deve poder fazer tudo o que um SA pode fazer.
Gaius
@ Gaio Por um lado, conheço alguém que não possui rootdireitos de acesso em um cluster de servidores, mas ainda pode usar o Ansible para gerenciar um aplicativo Web grande lá. Além disso, existem SAs que não efetuam login como root, mas usam sudomais moderadamente.
Drux
Eles ainda precisam executar comandos como root então. Se o agente em execução é um desastre para você, você está aplicando mal a ferramenta #
Gaius

Respostas:

5

A resposta direta é "não".

O Ansible não possui nenhum banco de dados, pois deve ser executado por diferentes operadores de computadores diferentes e seu objetivo é garantir que os sistemas de destino estejam no estado exato, conforme especificado nos manuais.

Há uma opção para anexar back-end de cache de fatos externos ao Ansible. Para que você possa configurar o redis como seu cache, o Ansible o preencherá com fatos reunidos durante a execução do manual e, posteriormente, você poderá consultar os redis. Mas é uma solução muito limitada, porque não há muitos fatos coletados pelo Ansible, por exemplo, não há informações sobre pacotes instalados - você terá que reuni-los pessoalmente e usar uma opção set_factcom cacheableopção para colocá-los em cache externo.

Konstantin Suvorov
fonte
11
Valeu. Eu não entendo o "porque" no seu segundo parágrafo: o Puppet também afirmaria que "deve ser executado por diferentes operadores de computadores diferentes e seu objetivo é garantir que os sistemas de destino estejam no estado exato" ( apenas que falaria de manifestos em vez de playbooks), mas usa um banco de dados.
Drux
Eu quis dizer "sem nenhum componente central / compartilhado". Portanto, no Ansible, você não possui nenhum componente com estado, exceto o sistema de destino.
Konstantin Suvorov
Entendo, isso faz sentido.
Drux