Sobes.tech
Middle

O que é um inventário dinâmico?

sobes.tech IA

Resposta da IA

O inventário dinâmico é uma lista de hosts ou objetos geridos pela plataforma de automação (por exemplo, Ansible), que é gerada em tempo real com base em dados de fontes externas. Ao contrário do inventário estático, onde a lista de hosts é fixa num ficheiro, o inventário dinâmico atualiza-se automaticamente a cada pedido, refletindo o estado atual da infraestrutura.

As fontes de dados podem ser:

  • Provedores de cloud (AWS EC2, Azure VMs, Google Cloud Engine)
  • Sistemas de virtualização (VMware vSphere, OpenStack)
  • Sistemas de monitorização e deteção (CMDB, Zabbix)
  • Scripts personalizados

Vantagens do inventário dinâmico:

  • Atualidade: Reflete sempre o estado atual da infraestrutura, incluindo hosts adicionados ou removidos.
  • Escalabilidade: Facilita a gestão de ambientes grandes e em constante mudança.
  • Automatização: Integra-se com ferramentas de orquestração e automação.
  • Flexibilidade: Permite agrupar hosts com base em diferentes atributos (tags, região, tipo de SO).

Exemplo de uso no Ansible:

#!/usr/bin/env python
# Este é um exemplo simplificado de um script de inventário dinâmico para Ansible
# baseado na leitura de dados de teste de um ficheiro JSON.
# Num cenário real, este script consultaria uma API de cloud ou CMDB.

import json
import os

def main():
    # Assume-se que os dados de teste estão armazenados em 'inventory_data.json'
    inventory_file = 'inventory_data.json'

    if not os.path.exists(inventory_file):
        # Devolve estruturas vazias se o ficheiro não existir
        inventory = {"_meta": {"hostvars": {}}}
        print(json.dumps(inventory))
        return

    try:
        with open(inventory_file, 'r') as f:
            inventory_data = json.load(f)

        # Transformar dados para o formato de inventário dinâmico do Ansible
        inventory = {}
        inventory["_meta"] = {"hostvars": {}}

        for group, hosts_info in inventory_data.items():
            inventory[group] = {"hosts": []}
            for host_info in hosts_info:
                hostname = host_info["hostname"]
                inventory[group]["hosts"].append(hostname)
                # Adicionar variáveis específicas do host
                inventory["_meta"]["hostvars"][hostname] = host_info.get("vars", {})

        print(json.dumps(inventory))

    except Exception as e:
        # Lidar com erros de forma adequada num script real
        print(f"Erro ao processar dados de inventário: {e}")
        inventory = {"_meta": {"hostvars": {}}}
        print(json.dumps(inventory))

if __name__ == '__main__':
    main()

Exemplo de conteúdo de inventory_data.json para o script acima:

{
  "webservers": [
    {
      "hostname": "webserver1.example.com",
      "vars": {
        "http_port": 80,
        "max_clients": 200
      }
    },
    {
      "hostname": "webserver2.example.com",
      "vars": {
        "http_port": 8080,
        "max_clients": 500
      }
    }
  ],
  "databases": [
    {
      "hostname": "db1.example.com",
      "vars": {
        "db_type": "postgresql"
      }
    }
  ]
}

O inventário dinâmico é fundamental para a gestão eficiente de infraestruturas modernas e dinâmicas.