Puppet – Melhorando as configurações para hosts

Logo-Puppet
Continuando nossos artigos sobre como melhorar o Gerenciamento da TI, vamos hoje organizar melhor as configurações do Puppet.
Ele utiliza nomes padrão para seus arquivos manifests como site.pp ou nodes.pp, mas como eu gosto de organizar mais minhas configurações, um arquivo com várias classes e hosts não me atende. Vamos ver como fazer o puppet ler outros arquivos e criar classes para serviços específicos.

Quando configuramos os serviços como no último artigo todos os serviços que estão lá são aplicados a todos os hosts configurados, quando queremos que um tipo de serviço seja feito apenas para um hosts precisamos melhorar nossa configuração.
Primeiro vamos criar a área para download de arquivos via Puppet. Edite o arquivo fileserver.conf e crie a seção [files]. No servidor faça:
# vi /etc/puppet/fileserver.conf

[files]
path /etc/puppet/files
allow *
#  deny *.evil.example.com
#  allow 192.168.0.0/24


Assim criamos um diretório /etc/puppet/files onde ficarão os arquivos que baixaremos via puppet (puppet://files/nome-do-arquivo)
Agora vamos no diretório de manifests preparar nossos arquivos:
# cd /etc/puppet/manifests
Agora vamos criar nossos arquivos com as configurações para os hosts:
# vi services_base.pp

class update_system {
	exec { 'apt-get update':
		path => '/usr/bin/:/bin/:/sbin:/usr/sbin/'
	}
}
class upgrade_system {
	exec { 'apt-get upgrade -y':
		path => '/usr/bin/:/bin/:/sbin:/usr/sbin/'
	}
}


O que fizemos nesse arquivo foi:
– Criamos clasess de serviços (class), que possuem nomes únicos que serão utilizados apenas nos hosts desejados.
– Colocamos a linha de comando no exec , entre aspas simples, e depois do : (dois pontos) o resto dos comandos ou qualificadores a serem executados. Cada linha nova tem sempre a mesma estrutura:

 função_do_puppet => 'valor',

e a vírgula no final da linha indica que temos mais linhas de configuração a serem executadas nesta classe e quando terminadas as tarefas da classe a linha final não tem vírgula. Veja o exemplo abaixo:

class nome_da_classe {
        função_principal_do_puppet { 'objeto_alvo_da_função' :
                           função_secundária => 'objeto_alvo_da_função',
                           função_secundária => 'objeto_alvo_da_função',
                           função_secundária => 'objeto_alvo_da_função'
        } #Fecha a função principal
} #Fecha a classe


Assim conseguimos fazer que apenas os comandos desejados sejam feitos por um determinado hosts. Vamos ver nos exemplos abaixo:
# vi services_base.pp

class remove_apache {
	package { 'apache2.2-common': ensure => 'absent'
	}
}
class update_system {
	exec { 'apt-get update':
		path => '/usr/bin/:/bin/:/sbin:/usr/sbin/'
	}
}
class upgrade_system {
	exec { 'apt-get upgrade -y':
		path => '/usr/bin/:/bin/:/sbin:/usr/sbin/'
	}
}
class update_ntp_file {
	file { 'ntp.conf':
		path => '/etc/ntp.conf',
		source => 'puppet:///files/ntp.conf'
	}
	service { 'ntp':
		ensure => running,
		enable => true,
		hasrestart => true
	}
}


Temos:
– Uma classe para que o apache2.2-common seja removido
– Uma classe para que o sistema terá a lista de pacotes atualizada
– Uma classe para que o sistema terá seus pacotes atualizados
– Uma classe para atualizar o arquivo de configuração do NTP por um arquivo previamente configurado e disponibilizado pelo próprio puppet, além de reiniciar o serviço
Agora vamos ver o arquivo com os hosts:
# vi hosts.pp

node 'pclient1', 'pclient' {
	include update_system
	include upgrade_system
	include update_ntp_file
}
node 'nagios_server1' {
        include remove_apache
}


Agora vamos chamar esses arquivos pelo site.pp:
# vi site.pp

import 'service_base.pp'
import 'hosts.pp'


Reinicie o serviço puppetmaster e acompanhe nos clientes.
O resultado disso é que serviços e hosts estão em arquivos separados, os serviços estão organizados por classes e não soltos no arquivo. Assim os únicos serviços a serem executados são aqueles que forem chamados específicamente na configuração de um host (node).
O host nagios_server1 só terá o apache2.2-common removido enquanto os outros hosts pclient e pclient1 eles serão atualizados e terão o arquivo ntp.conf baixado do servidor substituindo o seu próprio e tendo o serviço reiniciado.
Neste artigo melhoramos um pouco nossas configurações para gerenciar múltiplos hosts e fazer download de configurações. Nos próximos artigos vamos aprender a fazer configurações específicas por distribuições Linux, como utilizar os módulos do puppet e até como criar um.
Não se esqueça de comentar, sugerir e curtir nossa página no Facebook.

Share

    Deixe uma resposta

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    © 2019 All Rights Reserved. Cooperati.