CMDB as Code, simples, fácil e rápido!
O que é um CMDB?
Se você trabalha na área de TI certamente já ouviu alguém falar sobre CMDB. CMDB é uma ferramenta com um banco de dados para guardar todos os ICs da empresa, hãããnn!? CMDB?!? ICs??! calma, calma, calma!! :). Explicando melhor, CMDB significa Configuration Management Database, e IC, Item de Configuração (IC), um IC é qualquer elemento tecnológico pertencente aos serviços de TI que necessite uma configuração ou uma gestão de configuração, ficou mais claro agora?
No folclore internético existe um ditado que diz assim, “There are only two hard things in Computer Science: cache invalidation and naming things.” –Phil Karlton, numa tradução livre seria “Há apenas duas coisas difíceis na Ciência da Computação: invalidação de cache e dar nomes a coisas”, eu, humildemente acrescentaria um terceiro ponto a esse folclore, criar e manter um (CMDB) consistente é uma coisa bem difícil. Difícil por inúmeras razões, aquisição da ferramenta, custo, administração e gestão da consistência dos [itens de configuração](https:// en.wikipedia.org/wiki/Configuration_management_database#Configuration_item_types).
Não é porque uma coisa é difícil que ela seja impossível de ser feita, e é exatamente esse o ponto do Ansible-CMDB, como fazer um levantamento do seu parque de máquinas e ter um resumo das características principais de maneira rápida?
Rápido e fácil
Como fazer um levantamento do seu parque de máquinas e ter num relatório das principais características de maneira rápida? Para ilustrar essa ideia é utilizado o Vagrant para criar um parque de máquinas com dez hosts simulando um ambiente de empresa.
O código abaixo é um vagrantfile que contém todas as definições do ambiente. Caso queira relembrar os passos de instalação e comandos básicos do Vagrant veja o post anterior Conhecendo o Vagrant.
1# -*- mode: ruby -*-
2# vi: set ft=ruby :
3
4# variaveis
5
6 vhosts =[
7 { :hostname => "infra-as-code-br", :box => "bento/ubuntu-18.04", :ip =>"10.10.10.100", :memory => "1024"},
8 { :hostname => "bo", :box => "minimal/centos6", :ip =>"10.10.10.101", :memory => "256"},
9 { :hostname => "stretch", :box => "minimal/centos7", :ip =>"10.10.10.102", :memory => "256"},
10 { :hostname => "jessie", :box => "minimal/centos7", :ip =>"10.10.10.103", :memory => "512"},
11 { :hostname => "squeeze", :box => "minimal/centos6", :ip =>"10.10.10.104", :memory => "256"},
12 { :hostname => "etch", :box => "minimal/xenial64", :ip =>"10.10.10.105", :memory => "256"},
13 { :hostname => "sarge", :box => "minimal/centos6", :ip =>"10.10.10.106", :memory => "512"},
14 { :hostname => "slink", :box => "minimal/centos7", :ip =>"10.10.10.107", :memory => "256"},
15 { :hostname => "woody", :box => "minimal/xenial64", :ip =>"10.10.10.108", :memory => "512"},
16 { :hostname => "potato", :box => "minimal/trusty64", :ip =>"10.10.10.109", :memory => "256"},
17 { :hostname => "rex", :box => "minimal/centos6", :ip =>"10.10.10.110", :memory => "512"},
18 ]
19
20Vagrant.configure("2") do |config|
21
22 vhosts.each do |vhost|
23
24 config.vm.define vhost[:hostname] do |node|
25 node.vm.box = vhost[:box]
26 node.vm.hostname = vhost[:hostname]
27 node.vm.box_url = vhost[:box]
28 node.vm.boot_timeout = 3600
29 node.vm.network :private_network, ip: vhost[:ip], virtualbox__intnet: true
30 node.vm.provider :virtualbox do |v|
31 v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
32 v.customize ["modifyvm", :id, "--memory", vhost[:memory]]
33 v.customize ["modifyvm", :id, "--name", vhost[:hostname]]
34 end
35 if vhost[:hostname] == "infra-as-code-br"
36 node.vm.provision "shell",
37 inline: "sudo apt update ; sudo apt install python-pip sshpass -y ; cp /vagrant/hosts.ini /home/vagrant/hosts.ini"
38 end
39 end
40 end
41end
Criando o ambiente de testes.
$ wget https://raw.githubusercontent.com/leoml/blog-infraascode/master/posts/CMDB-as-code/Vagrantfile $ vagrant up
A máquina infra-as-code-br será utilizada como base para disparar comandos de coleta e extração de dados do ambiente.
$ vagrant ssh infra-as-code-br $$ vagrant@infra-as-code-br:
Ferramentas de automação
Nessa etapa são utilizadas duas ferramentas de automação, Ansible para a coleta de dados e Ansible-CMDB para a do CMDB e geração de relatórios. Ansible é uma ferramenta de automação de tarefas voltada para realizar configurações de ambientes computacionais. Essa é uma explicação bastante sucinta sobre o Ansible mas por ora vamos ficar com ela. (Prometo em breve um post mais completo sobre Ansible ;) ).
Os procedimentos de instalação do Ansible é o seguinte.
vagrant@infra-as-code-br:$ sudo pip install ansible
Ferramenta de CMDB
O processo de instalação do Ansible-CMDB é tão simples quanto o seguinte comando.
vagrant@infra-as-code-br:$ sudo pip install ansible-cmdb
Gerando um CMDB do seu ambiente
Com o Ansible-CMDB instalado a geração do relatório se dá em duas etapas, são elas:
Coleta de dados com o Ansible
vagrant@infra-as-code-br:$ ansible infra_as_code_br -i hosts.ini -m setup – tree saida
Criação do relatório
vagrant@infra-as-code-br:$ ansible-cmdb saida/ CMDB_as_code.html
Resultados
O Ansible-CMDB é capaz de gerar um resultado nos seguintes formatos de saída: HTML, JSON, CSV, SQL entre outros. Como resultado foram utilizados dois modelos de formatação de saída um em HTML e outro no formato TXT.
Formatado em HTML
O resultado completo da saída HTML pode ser encontrado nesse link HTML, melhor visualização é salvando e abrindo localmente.
Formatado em TXT
O resultado completo em formato TXT pode ser encontrado neste link TXT.
Name OS IP Mem CPUs
------------ ------------ --------- --- ----
10.10.10.110 CentOS 6.6 10.0.2.15 0g 1
10.10.10.106 CentOS 6.6 10.0.2.15 0g 1
10.10.10.107 CentOS 7.0 10.0.2.15 0g 1
10.10.10.104 CentOS 6.6 10.0.2.15 0g 1
10.10.10.105 Ubuntu 16.04 10.0.2.15 0g 1
10.10.10.102 CentOS 7.0 10.0.2.15 0g 1
10.10.10.103 CentOS 7.0 10.0.2.15 0g 1
10.10.10.100 Ubuntu 18.04 10.0.2.15 1g 1
10.10.10.101 CentOS 6.6 10.0.2.15 0g 1
10.10.10.108 Ubuntu 16.04 10.0.2.15 0g 1
10.10.10.109 Ubuntu 14.04 10.0.2.15 0g 1
Conclusão
Para a gestão de TI um CMDB é fundamental ter uma visão completa dos componentes gerenciados, extrair relatórios de estados e planejar mudanças. O Ansible-CMDB funciona de maneira simples e se mostra uma alternativa viável e acessível para se conhecer minimamente as características de um ambiente. A ferramenta ainda apresenta um baixo custo de instalação, baixo custo de manutenção e uma curva de aprendizado muito pequena.
Outro ponto a ressaltar por ser simples, fácil de instalar de utilizar o Ansible-CMDB não possui muitas funcionalidade quando comparada com outras ferramentas de mercado que são muito bem pagas. Entretanto, o objetivo do Ansible-CMDB é ser tão simples quando descrito em sua documentação oficial que diz assim, “O Ansible-cmdb pega a saída da coleta de fatos gerados pelo Ansible e as converte em uma página estática de visão geral de HTML que contém informações de configuração do sistema”.
Boa sorte com a gestão dos seus ambientes!!
Dicas duca!!
- O Ansible-CMDB gera relatórios em JSON, você pode alimentar uma outra base de CMDB. - Você pode jogar tudo num arquivo CSV e trabalha no Excel. - Pode gerar uma saída no formato Markdown e gerar um documento formatado da sua infraestrutura. - Você pode gerar uma saída SQL e importa no MySQL ou no SQL Server. - Não limite sua criatividade ;)
Referências
- Vagrant file: https://raw.githubusercontent.com/leoml/blog-infraascode/master/posts/CMDB-as-code/Vagrantfile - Ansible: https://ansible-cmdb.readthedocs.io/en/latest/usage/ - Todos os fontes deste post: https://github.com/leoml/blog-infraascode/tree/master/posts/CMDB-as-code - Origem do nomes das máquinas: https://wiki.debian.org/DebianReleases
Convido você a ver os outros posts do Infra-as-Code
MENTORIA
Curtiu o blog? Quer trocar uma ideia comigo sobre algum post?
Marca Aqui! É um papo gratuito
oferecido para quem é leitor do blog, podemos falar de temas como: DevOps, SRE e carreira em TI.
Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!
|