Tabela de conteúdo
Tutorial Orquestração com Mcollective, Instalação e utilização do Facter, populando o arquivo facts.yaml, Utilizando o Mcollective para fazer consultas de inventários.
Introdução
O Mcollective é uma ferramenta que trabalha em conjunto com o Puppet para fazer a Orquestração e execução de tarefas nos hosts.
Muitas tarefas de orquestração precisa de plugin, então neste tutorial vamos aprender a instalar o plugin facter para fazer consultas de inventário via Mcollective.
Se você quiser por exemplo fazer a instalação de pacotres remotamente via Mcollective ou simplesmente reiniciar serviços, você precisará instalar os plugins necessários para esta atividade, e assim por diante.
O Plugin Facter não tem pacotes para a instalação via yum ou apt-get, é preciso copiar os arquivos “.rb” para as pastas “lib” do Mcollective.
Neste link Puppet Plugins tem a lista de plug-ins disponíveis para o puppet.
Alguns plugin tem o pacote para instalação via yum e apt-get.
Infraestrutura do ambiente
Puppet Server: puppetserver-01.devopslab.com.br
Nodes/Clientes: puppetclient-01.devopslab.com.br
Centos 7 – 64 bits instalação mínima.
puppetserver 2.2.1
puppet 4.3.2
puppet-agent 1.3.5
Pré-requisitos
Você precisa ter o Puppet Server, Puppet Agent e Mcollective funcionando. Você pode seguir estes 2 tutoriais:
Instalação do Puppet Server e Puppet Agent.
Como instalar o Puppet Server e clientes
Mcollective.
Instalação e orquestração via Mcollective
1. Configuração dos clientes/nodes
Faça o login nos seus clientes e copie o arquivo “yaml_facts.rb” para a pasta facts do mcollective.
O arquivo “yaml_facts.rb” já existe no sistema, ele foi instalado junto do Mcollective, e o Mcollective foi instalado junto do puppet-agent, sendo assim utilize o comando find para encontrar.
#find yaml_facts.rb
[root@puppetclient-01 /]# find / -name yaml_facts.rb /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/mcollective/facts/yaml_facts.rb
Faça a copia para a pasta facts.
[root@puppetclient-01/]# mkdir /usr/libexec/mcollective/mcollective/facts [root@puppetclient-01 /]# cp -v /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/mcollective/facts/yaml_facts.rb /usr/libexec/mcollective/mcollective/facts ‘/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/mcollective/facts/yaml_facts.rb’ -> ‘/usr/libexec/mcollective/mcollective/facts/yaml_facts.rb’
Configure as linhas abaixo no arquivo: /etc/puppetlabs/mcollective/server.cfg.
# Facts factsource = yaml plugin.yaml = /etc/puppetlabs/mcollective/facts.yaml
Estas linhas já existem na verdade, mas você precisa garantir isto, sendo assim verifique.
Reincie o Mcollective.
#systemctl restart mcollective.service
Agora precisamos popular o arquivo facts.yaml.
[root@puppetclient-01 /]# facter --yaml > /etc/puppetlabs/mcollective/facts.yaml
2. Utilização do Mcollective – Fazendo consultas com o Mcollective
Faça o login no Puppet Server e faça a consulta.
[root@puppetserver-01 /]#mco inventory puppetclient-01
Eu editei a saída pois são muitas coisas, mas é algo parecido com isto.
.... Facts: augeas => {"version"=>"1.4.0"} ... facterversion => 3.1.4 filesystems => xfs identity => {"gid"=>"0", "group"=>"root", "uid"=>"0", "user"=>"root"} is_virtual => true kernel => Linux kernelmajversion => 3.10 kernelrelease => 3.10.0-327.10.1.el7.x86_64 kernelversion => 3.10.0 load_averages => {"15m"=>"0.05", "1m"=>"0", "5m"=>"0.01"} ...
Perceba que a saída não é muito amigável, no entanto é completa. Abaixo vamos criar um módulo para a criação do facter.yaml de forma automática e com uma saída mais amigável.
É possível personalizar a consulta de inventário com filtros e scripts.
Como fazer os scripts você pode consultar aqui: http://docs.puppetlabs.com/mcollective/reference/ui/nodereports.html
Bom, tudo que nós fizemos aqui foi de forma manual para demonstrar, então o que fizemos foi:
Configuração do arquivo server.cfg
Copiamos o arquivo yaml_facts.rb para a pasta facts do Mcollective.
Populamos o arquivo facts.yaml.
Reiniciamos o Mcollective.
Porém obviamente estes 4 processos precisam ser feito via Puppet de forma automática.
3. Criando um módulo para a instalação automática do plugin facter e população do facts.yaml
O que será feito:
Cópia do arquivo server.cfg do mcollective.
Cópia do arquivo yaml_facts.rb para a pasta facts do Mcollective.
Criar o arquivo facts.yaml populado com os fatos.
Restart do Mcollective.
3.1. Primeiramente vamos criar um módulo, o nome pode ser Mcollective.
#cd /etc/puppetlabs/code/environments/production/modules #puppet module generate --skip-interview devopslav-mcollective
Utilizei a opção “–-skip-interview” pois não quero responder ao monte de perguntas para a criação dos metadados do módulo, mas é interessante saber sobre isto.
3.2. Crie uma pasta “files” para o armazenamento dos arquivos server.cfg e yaml_facts.rb, já que estes 2 arquivos serão copiados para os clientes.
#mkdir /etc/puppetlabs/code/environments/production/modules/mcollective/files #cp /etc/puppetlabs/mcollective/server.cfg /etc/puppetlabs/code/environments/production/modules/mcollective/files #cp /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/mcollective/facts/yaml_facts.rb /etc/puppetlabs/code/environments/production/modules/mcollective/files
3.3. Vamos fazer a definir a classe para popular o arquivo facter.yaml.
Lembre-se que existem várias formas de definir uma classe
#cd /etc/puppetlabs/code/environments/production/modules/mcollective/manifests #vi facter.pp
class mcollective::facter { #Dependencias package { 'puppet-agent': ensure => 'installed', } service { 'mcollective.service': ensure => 'running', } #Criação do arquivo arquivo server.cfg file {"server.cfg": path => '/etc/puppetlabs/mcollective/server.cfg', source => 'puppet:///modules/mcollective/server.cfg', #O arquivo server.cfg foi copiado para a pasta file do pupper master. #Crie a pasta file dentro do modulo. #/etc/puppetlabs/code/environments/production/modules/mcollective/files/server.cfg ensure => 'file', owner => 'root', group => 'root', mode => '0644', require => Package['puppet-agent'], notify => Service['mcollective.service'], } #criação do diretorio facts. file { "/usr/libexec/mcollective/mcollective/facts/": ensure => 'directory', owner => 'root', group => 'root', mode => '0755', } #copia do arquivo yaml_facts.rb para a pasta facts file { "yaml_facts.rb": path => "/usr/libexec/mcollective/mcollective/facts/yaml_facts.rb", #O arquivo yaml_facts.rb esta dentro da pasta file do puppet master. #Crie a pasta file dentro do modulo. #/etc/puppetlabs/code/environments/production/modules/mcollective/files/yaml_facts.rb source => "puppet:///modules/mcollective/yaml_facts.rb", ensure => 'file', owner => 'root', group => 'root', mode => '0644', require => File["/etc/puppetlabs/mcollective/server.cfg"], } #preencher o arquivo facts.yaml com os fatos. populate facts.yaml. file{"/etc/puppetlabs/mcollective/facts.yaml": owner => root, group => root, mode => '0640', loglevel => debug, # reduce noise in Puppet reports content => inline_template("<%= scope.to_hash.reject { |k,v| k.to_s =~ /(uptime_seconds|timestamp|free)/ }.to_yaml %>"), # exclude rapidly changing facts notify => Service['mcollective.service'], } }
3.4. Crie a definição do node
root@puppetserver-01 ~]# cd /etc/puppetlabs/code/environments/production/manifests [root@puppetserver-01 ~]# vi puppetclient-01.pp node 'puppetclient-02.devopslab.com.br' { include mcollective::facter }
Agora execute no cliente puppetclient-01 o comando “puppet agente –t”.
[root@puppetclient-01 ~]# puppet agent -t
O comando vai baixar o arquivo server.cfg, popular o facter.yaml e reiniciar o mcollective.
Consulte o inventário.
[root@puppetserver-01 ~]# mco inventory puppetclient-01
Agora a saída está muito melhor certo? ficou melhor pois na definição da classe mcollective::facter foi colocado a opção:
content => inline_template("<%= scope.to_hash.reject { |k,v| k.to_s =~ /(uptime_seconds|timestamp|free)/ }.to_yaml %>"),
Isto deixa a saída um pouco mais legível.
Referências:
http://docs.puppetlabs.com/mcollective/deploy/standard.html#step-4-configure-servers
https://docs.puppetlabs.com/mcollective/deploy/plugins.html#about-plugins–available-plugin-types
http://docs.puppetlabs.com/mcollective/reference/ui/nodereports.html
See you.
Leonardo
Excelente post Leandro,
Porem meu mcollective não encontra nenhum host ja configurado no puppet…e no log não aparece nada de anormal…sabe o que pode ser?
Junior, vou subir a parte do tutorial relacionado ao Mcollective. Me desculpe, acabei me esquecendo de publicar o tutorial sobre o Mcollective, sendo assim não vai funcionar mesmo.
Segue a parte que estava faltando para o funcionamento do Mcollective.
http://devopslab.com.br/puppet-instalacao-e-configuracao-do-mcollective-plugins-e-orquestracao-de-clientes/
Agora vai 😉