Skip to content

Instantly share code, notes, and snippets.

@mths0x5f
Last active March 24, 2017 18:47
Show Gist options
  • Save mths0x5f/9f57658aae7cdb3272d94cd92e94379a to your computer and use it in GitHub Desktop.
Save mths0x5f/9f57658aae7cdb3272d94cd92e94379a to your computer and use it in GitHub Desktop.
Usando Puppet para instalar o Zabbix no CentOS 7

Adendo

As máquinas destinadas aos ambientes Zabbix aqui, não possuem acesso à Internet. Por isso, é preciso tunnelar um proxy para poder executar a instalação de todos os pacotes necessários.

Você precisará adicionar uma linha proxy=http://localhost:3128/ no arquivo /etc/yum.conf para que o YUM possa operar pelo proxy. Teste com # yum update e se o YUM reclamar sobre chaves GPG, importe-as com rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7.

O Puppet Master já foi instalado na máquina de IP 10.99.14.8. Prossiga com a instalação dos Agents. Note que o Puppet só conseguirá manter instalações que ele tenha feito. Então garanta que as máquinas não possuam o Zabbix instalado ainda.

No entanto, para poder utilizar a funcionalidade de gerenciamento dos templates do Zabbix, você precisará incluir o manifest site_master.pp, copiar o script dump_zabbix.py para o diretório /opt/ e fazê-lo executável com $ sudo chmod +x /opt/dump_zabbix.py. Também pode ser preciso criar o diretório /etc/puppetlabs/code/environments/production/modules/zabbix/files/templates/. Depois tudo isso, basta ativar o Agent na máquina Master (sim, o Master gerenciará a própria máquina).

Se quiser que a importação dos templates excluam certos valores do Zabbix inexistentes no .xml, faça a substituição do arquivo /etc/puppetlabs/code/environments/production/modules/zabbix/lib/puppet/provider/zabbix_template/ruby.rb pelo arquivo ruby.rb em anexo.

Instalação

Este tutorial trata dos passos necessários para a configuração de um Puppet Master e um Puppet Agent, sem enrolação. Ele foi baseado neste aqui. Espera-se que o leitor tenha algum conhecimento básico de Linux/Unix.

Observação

Devido a estrutura do Puppet, é conveniente a criação de um servidor DNS local às máquinas do Master e dos Agents. http://lbrvirtual.com.br/blog/index.php/2015/09/13/instalando-e-configurando-o-bind9-no-ubuntudebian/ (A alternativa é criar registros no /etc/hosts, mas não é recomendável pela complexidade adicional de editá-lo em cada máquina – Observe os exemplos de como os arquivos hosts devem ficar nos arquivos anexos hosts_agents e hosts_master).

Instalação do Puppet Master no CentOS 7

Requerimentos

Modo de fazer

  1. Em uma máquina com pelo menos 2GB de RAM, instale o CentOS 7 e atualize o sistema com $ sudo yum update -y. Garanta que ela esteja em rede com outras máquinas locais com $ ip a e $ ping.

  2. Confira e edite os valores de hostname da máquina, em /etc/hostname e /etc/hosts, tal que o comando $ ping $(hostname) obtenha sucesso. Dê preferência ao hostname puppet, caso contrário precisará configurar este valor em todos os agents. (Obs.: Soluções como OpenStack ou Docker, modificam esses valores a cada inicialização da instância).

  3. Não se esqueça de adicionar pelo menos um registro ao servidor DNS referente a essa máquina. (Você pode ignorar essa e a próxima instrução se for utilizar o arquivo /etc/hosts para gerenciar o nome das máquinas). Configure o endereço do DNS a ser usado localmente, com sudo printf "search puppetexample.com\nnameserver 0.0.0.0\n" | sudo tee -a /etc/resolv.conf, onde puppetexample.com corresponde a sua zona e 0.0.0.0 é o IP do seu servidor DNS.

  4. Pare o firewall com $ sudo systemctl stop firewalld e desative-o com $ sudo systemctl disable firewalld. Também desative o SELinux, editando para SELINUX=disabled em /etc/selinux/config. Reinicie a máquina para as mudanças surtirem efeito. Você pode e deve ajustar as políticas de firewall depois.

  5. Instale o repositório oficial do Puppet em seu sistema $ sudo yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm e então o pacote do Puppet Master Server $ sudo yum install -y puppetserver. Se instalou em um sistema com menos de 4GB de RAM, você precisará ajustar a variável JAVA_ARGS em /etc/sysconfig/puppetserver.

  6. Finalmente, teste se o serviço inicia com $ sudo systemctl start puppetserver e $ sudo systemctl status puppetserver. Se não houver nenhuma falha, ative o serviço $ sudo systemctl enable puppetserver.

  7. Adicionalmente, instale o r10k para gerenciar módulos declarados em um Puppetfile, com $ sudo /opt/puppetlabs/puppet/bin/gem install r10k

Instalação do Puppet Agent no CentOS 7

Observe que os passos citados aqui precisam ser feitos em cada máquina que for atuar como node do Puppet. O ideal é que os processos sejam automatizados com a criação da máquina através de uma imagem de SO padrão, script pós-criação ou utilitário cloud-init.

Modo de fazer

  1. Instale o CentOS 7 e atualize o sistema com $ sudo yum update -y. Garanta que ela esteja em rede com outras máquinas locais com $ ip a e $ ping. A máquina agent não possui requerimentos específicos de RAM ou disco.

  2. Confira e edite os valores de hostname da máquina, em /etc/hostname e /etc/hosts, tal que o comando $ ping $(hostname) obtenha sucesso. (Obs.: Soluções como OpenStack ou Docker, modificam esses valores a cada inicialização da instância).

  3. Não se esqueça de adicionar pelo menos um registro ao servidor DNS referente a essa máquina. (Você pode ignorar essa e a próxima instrução se for utilizar o arquivo /etc/hosts para gerenciar o nome das máquinas). Configure o endereço do DNS a ser usado localmente, com sudo printf "search puppetexample.com\nnameserver 0.0.0.0\n" | sudo tee -a /etc/resolv.conf, onde puppetexample.com corresponde a sua zona e 0.0.0.0 é o IP do seu servidor DNS.

  4. Instale o repositório oficial do Puppet em seu sistema $ sudo yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm e então o pacote do Puppet Agent $ sudo yum install -y puppet-agent.

  5. Se o hostname de seu Master for diferente de puppet, você precisa acrescentar isso em /etc/puppetlabs/puppet/puppet.conf, com:

[main]
server = puppetexample.com
  1. Finalmente, teste se o serviço inicia com $ sudo systemctl start puppet e $ sudo systemctl status puppet. Se não houver nenhuma falha, ative o serviço $ sudo systemctl enable puppet.

Certificados

Antes de tudo você vai precisar aprovar os certificados de todos seus Agents no Master.

Aprovando certificados

Se tudo ocorreu bem na instalação do Agent, ele terá enviado uma requisição de reconhecimento de certificado ao Master ao iniciar o serviço. Antes de o Agent ser capaz de comunicar com o Master, é preciso aprovar o certificado de dado Agent.

  1. No Master execute $ sudo /opt/puppetlabs/bin/puppet cert list para ver os certificados pendentes. Note que a saída mostrará todos os hostnames de todos os Agents que ainda não tiverem seus certificados assinados.

  2. Use $ sudo /opt/puppetlabs/bin/puppet cert sign --all caso queira aprovar todos os hosts na fila, ou $ sudo /opt/puppetlabs/bin/puppet cert sign <hostname> caso queira aprovar um em específico.

Revogando certificados

Você talvez queira em algum momento refazer um host do zero, neste caso precisará revogar o certificado com $ sudo /opt/puppetlabs/bin/puppet cert clean <hostname>

Vendo todos os hosts assinados e não-assinados

Basta usar o comando $ sudo /opt/puppetlabs/bin/puppet cert list --all. Os hosts aprovados possuirão um + em sua frente.

É possível ativar a auto-assinatura dos certificados, reduzindo o trabalho. Leia mais em: https://docs.puppet.com/puppet/4.9/ssl_autosign.html

Usando o Puppet para instalar o Zabbix

Para os efeitos deste tutorial que apenas pretende executar os passos de instalação de um ambiente Zabbix, é necessário somente saber que:

Master

  1. O Puppetfile é um arquivo que lista todos os módulos que são dependência do seu manifest. Este arquivo deve ser editado em /etc/puppetlabs/code/environments/production/Puppetfile. Estando no diretório /etc/puppetlabs/code/environments/production/, execute $ sudo /opt/puppetlabs/puppet/bin/r10k puppetfile install para instalar os módulos. O r10k é um utilitário capaz de baixar essas dependências, mas é incapaz de resolver dependências das suas dependências (O Puppet Enterprise tem uma ferramenta mais inteligente para isso, baseada no r10k).

  2. O diretório /etc/puppetlabs/code/environments/production/manifests/ é onde os arquivos manifest (.pp) devem ser colocados por padrão. O Puppet analisa cada um dos arquivos (e subdiretórios) em ordem numérica-alfabética, de forma que o conteúdo do arquivo 01.pp vai ser analisado antes do arquivo abacaxi.pp que vai ser analisado antes do arquivo pamonha.pp.

  3. Geralmente a instalação do Puppet vem com um arquivo /etc/puppetlabs/code/environments/production/manifests/site.pp em branco. Edite ou substitua com o conteúdo do arquivo site.pp que acompanha. No exemplo, agent1.puppet, agent2.puppet e agent3.puppet se referem aos hostnames/domínios atribuídos a cada máquina. Note que é perfeiramente possível separar cada definição em arquivos diferentes, assim zabbix_web.pp, zabbix_mysql.pp, zabbix_proxy.pp são nomes de arquivos para organizar o diretório.

  4. Por padrão os Agents checam o Master a cada 30 minutos. Como os intervalos não são sincronizados entre as máquinas, isso causará um pequeno problema (já que o node com o banco de dados precisa ser configurado antes do node com o Zabbix Server, por exemplo). Veremos como proceder a seguir.

Agents

  1. Em cada agent que precisar aplicação imediada das definições, você poderá executar $ sudo /opt/puppetlabs/bin/puppet agent --test

  2. O Zabbix Server e o Web precisam de um banco de dados para poderem proceder com a instalação. O Puppet é inteligente o suficiente para realizar as coisas por etapas sem comprometer o todo. Isso significa que você pode esperar por uma ou duas horas até que os agents tenham completado os ciclos de atualização para que tenha um ambiente instalado e funcional. Ou pode simplesmente executar o comando acima em cada uma das máquinas, começando com o node do banco de dados, porque é preciso criá-lo antes de instalar o Zabbix.

  3. O node com o Zabbix Server talvez precise de 3 execuções do comando do passo 1. O que acontece é que em distribuições RedHat-like alguns erros de permissão acontecem e a cada execução eles são resolvidos gradualmente pelo módulo.

Parabéns!!! Se tudo deu certo, você já poderá utilizar o ambiente Zabbix! Acesse o Zabbix Web pelo domínio definido no manifest. O usuário e a senha padrão do banco é zabbix_server e zabbix_server.

Isto é só o começo, há outras otimizações e truques que podem ser feitos com o Puppet, porém o necessário está aqui.

Obs.: Se precisar alterar alguma configuração, siga o modelo do resto do manifest. No módulo puppet/zabbix, há uma chave para cada item nos arquivos de configuração dos daemons do Zabbix, grafada exatamente da mesma forma, só que em minúsculas.

#!/usr/bin/env python
# coding: utf-8
import urllib2, json
from xml.dom import minidom
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--user', help='Usuário, def.: Admin', default='Admin')
parser.add_argument('--password', help='Senha, def.: zabbix', default='zabbix')
parser.add_argument('--valuemap', help='Se a exportação é exclusivamente de value maps', action='store_true')
parser.add_argument('url', help='Ex.: http://zabbix.com ou http://10.99.0.120')
args = parser.parse_args()
url = args.url+'/api_jsonrpc.php'
data = {
"jsonrpc": "2.0",
"method": None,
"params": {},
"id": 1,
"auth": None
}
def _make_request(url, data):
req = urllib2.Request(url, data=json.dumps(data).encode('utf8'),
headers={'Content-Type': 'application/json'})
response = urllib2.urlopen(req).read().decode()
return json.loads(response)
def login(user, password, data):
data['method'] = 'user.login'
data['params']['user'] = user
data['params']['password'] = password
response = _make_request(url, data)
return response['result']
def get_templates_ids(auth_token, data):
data['method'] = 'template.get'
data['params']['output'] = 'id'
data['auth'] = auth_token
response = _make_request(url, data)
ids = []
[ ids.append(i['templateid']) for i in response['result'] ]
return ids
def get_xml_export(templates_ids, auth_token, data):
data['method'] = 'configuration.export'
data['params']['options'] = {}
data['params']['options']['templates'] = templates_ids
data['params']['format'] = 'xml'
data['auth'] = auth_token
response = _make_request(url, data)
return response['result']
def get_valuemaps_ids(auth_token, data):
data['method'] = 'valuemap.get'
data['params']['output'] = 'id'
data['auth'] = auth_token
response = _make_request(url, data)
ids = []
[ ids.append(i['valuemapid']) for i in response['result'] ]
return ids
def get_xml_export_valuemaps(valuemaps_ids, auth_token, data):
data['method'] = 'configuration.export'
data['params']['options'] = {}
data['params']['options']['valueMaps'] = valuemaps_ids
data['params']['format'] = 'xml'
data['auth'] = auth_token
response = _make_request(url, data)
return response['result']
auth_token = login(args.user, args.password, data)
if args.valuemap is not True:
templates_ids = get_templates_ids(auth_token , data)
xml_dump = get_xml_export(templates_ids, auth_token, data)
else:
valuemaps_ids = get_valuemaps_ids(auth_token , data)
xml_dump = get_xml_export_valuemaps(valuemaps_ids, auth_token, data)
#print(minidom.parseString(xml_dump.decode('utf8')).toprettyxml(indent = ' ').encode('utf8'))
print(xml_dump.encode('utf8'))
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
# Puppet Master
10.99.0.230 puppet puppet.zbx
# Puppet Agents
172.20.0.71 zabbix-poller-plat-prd01 zabbix-poller-plat-prd01.network.ctbc
172.20.0.72 zabbix-poller-plat-prd02 zabbix-poller-plat-prd02.network.ctbc
172.20.0.73 zabbix-poller-plat-prd03 zabbix-poller-plat-prd03.network.ctbc
172.20.0.74 zabbix-poller-plat-prd04 zabbix-poller-plat-prd04.network.ctbc
172.20.0.75 zabbix-mysql-plat-prod01 zabbix-mysql-plat-prd01.network.ctbc
172.20.0.76 zabbix-srv-plat-prd01 zabbix-srv-plat-prd01.network.ctbc
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 puppet puppet.zbx
# Puppet Agents
172.20.0.71 zabbix-poller-plat-prd01 zabbix-poller-plat-prd01.network.ctbc
172.20.0.72 zabbix-poller-plat-prd02 zabbix-poller-plat-prd02.network.ctbc
172.20.0.73 zabbix-poller-plat-prd03 zabbix-poller-plat-prd03.network.ctbc
172.20.0.74 zabbix-poller-plat-prd04 zabbix-poller-plat-prd04.network.ctbc
172.20.0.75 zabbix-mysql-plat-prod01 zabbix-mysql-plat-prd01.network.ctbc
172.20.0.76 zabbix-srv-plat-prd01 zabbix-srv-plat-prd01.network.ctbc
# Dependências
mod 'puppetlabs-puppetdb', '5.1.2'
mod 'puppetlabs-apache', '1.11.0'
mod 'puppetlabs-apt', '2.3.0'
mod 'puppetlabs-concat', '2.2.0'
mod 'puppetlabs-firewall', '1.8.1'
mod 'puppetlabs-mysql', '3.10.0'
mod 'puppetlabs-pe_gem', '0.2.0'
mod 'puppetlabs-postgresql', '4.8.0'
mod 'puppetlabs-ruby', '0.6.0'
mod 'puppet-staging', '2.1.0'
mod 'puppetlabs-stdlib', '4.14.0'
mod 'camptocamp-systemd', '0.4.0'
# Módulo gerenciador do SELinux
mod 'puppet-selinux', '0.7.0'
# Módulo que ativa o repositório EPEL
mod 'stahnma-epel', '1.2.2'
# Módulo para gerenciar o resolv.conf
mod 'ghoneycutt-dnsclient', '3.5.2'
# Módulo de instalação e configuração do Zabbix
mod 'puppet-zabbix', '2.6.1'
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'zabbix'))
Puppet::Type.type(:zabbix_template).provide(:ruby, parent: Puppet::Provider::Zabbix) do
def connect
self.class.require_zabbix if @resource[:zabbix_url] != ''
@zbx ||= self.class.create_connection(@resource[:zabbix_url], @resource[:zabbix_user], @resource[:zabbix_pass], @resource[:apache_use_ssl])
@zbx
end
def create
# Connect to zabbix api
zbx = connect
zbx.configurations.import(
format: 'xml',
rules: {
applications: {
createMissing: true,
updateExisting: true,
deleteMissing: true
},
discoveryRules: {
createMissing: true,
updateExisting: true,
deleteMissing: true
},
graphs: {
createMissing: true,
updateExisting: true,
deleteMissing: true
},
groups: {
createMissing: true
},
image: {
createMissing: true,
updateExisting: true
},
items: {
createMissing: true,
updateExisting: true,
deleteMissing: true
},
maps: {
createMissing: true,
updateExisting: true
},
screens: {
createMissing: true,
updateExisting: true
},
templateLinkage: {
createMissing: true
},
templates: {
createMissing: true,
updateExisting: true
},
templateScreens: {
createMissing: true,
updateExisting: true,
deleteMissing: true
},
triggers: {
createMissing: true,
updateExisting: true,
deleteMissing: true
}
},
source: template_contents
)
end
def destroy
zbx = connect
id = zbx.templates.get_id(host: @resource[:template_name])
zbx.templates.delete(id)
end
def exists?
zbx = connect
zbx.templates.get_id(host: @resource[:template_name])
end
def xml
zbx = connect
zbx.configurations.export(
format: 'xml',
options: {
templates: [zbx.templates.get_id(host: @resource[:template_name])]
}
)
end
def template_contents
file = File.new(@resource[:template_source], 'rb')
file.read.force_encoding('UTF-8')
end
end
# Desativar SELinux e firewalld em todos os nodes
class { 'selinux':
mode => 'disabled',
}
service { 'firewalld':
ensure => 'stopped',
enable => false,
}
# Inclui repo EPEL
include epel
node 'zabbix-srv-plat-prd01.network.ctbc' {
# Node com Zabbix Server e Web
class { 'apache':
mpm_module => 'prefork',
}
class { 'apache::mod::php': }
# Este módulo remove o arquivo /etc/httpd/conf.d/zabbix.conf e cria outro,
# gerenciado por ele, em seu lugar: /etc/httpd/conf.d/25-zabbix-srv-plat-prd01.network.ctbc.conf
class { 'zabbix::web':
zabbix_version => '3.0',
zabbix_url => 'zabbix-srv-plat-prd01.network.ctbc', # domínio para acessar via navegador
zabbix_server => 'zabbix-srv-plat-prd01.network.ctbc',
zabbix_timezone => 'America/Sao_Paulo',
vhost_default => true, # permite que o Zabbix seja acessado pelo IP
apache_php_max_execution_time => '14400',
apache_php_memory_limit => '2048M',
apache_php_post_max_size => '32M',
apache_php_upload_max_filesize => '4M',
apache_php_max_input_time => '14400',
database_host => 'zabbix-mysql-plat-prd01.network.ctbc',
database_type => 'mysql',
}
class { 'mysql::client': }
# Módulo que instala o Zabbix Server e
# gerencia o arquivo /etc/zabbix/zabbix_server.conf
class { 'zabbix::server':
zabbix_version => '3.0',
database_host => 'zabbix-mysql-plat-prd01.network.ctbc',
database_type => 'mysql',
# parametros alteraveis (em máq. com pouca RAM, não sobe)
logfilesize => '0',
startpollers => '400',
startpollersunreachable => '200',
startpingers => '400',
startdiscoverers => '100',
maxhousekeeperdelete => '5000',
cachesize => '6G',
historycachesize => '2G',
historyindexcachesize => '2G',
valuecachesize => '6G',
# ----------------------------------------------
manage_firewall => true,
}
class { 'zabbix::agent':
zabbix_version => '3.0',
server => 'zabbix-srv-plat-prd01.network.ctbc, zabbix-poller-plat-prd01.network.ctbc, zabbix-poller-plat-prd02.network.ctbc, zabbix-poller-plat-prd03.network.ctbc, zabbix-poller-plat-prd04.network.ctbc',
}
zabbix::template { 'template':
templ_source => 'puppet:///modules/zabbix/templates/zabbix.xml',
}
}
node 'zabbix-mysql-plat-prd01.network.ctbc' {
# Node com MySQL
class { 'mysql::server':
package_name => 'mysql-commercial-server',
service_name => 'mysqld',
config_file => '/etc/my.cnf',
includedir => '/etc/my.cnf.d',
override_options => {
'mysql' => {
# 'user' => 'zabbix',
# 'password' => 'Z@bb1Xm3tr0',
},
'mysqladmin' => {
# 'user' => 'zabbix',
# 'password' => 'Z@bb1Xm3tr0',
},
'mysqld' => {
'bind_address' => '172.20.0.75', # endereço da máquina
# parametros alteraveis (em máq. com pouca RAM, não sobe)
'innodb_buffer_pool_size' => '12G',
'innodb_log_file_size' => '14G',
'max_connections' => '1500',
'slow_query_log' => '1',
'slow_query_log_file' => '/var/log/mysql/slow.log',
'long_query_time' => '10',
'log_queries_not_using_indexes' => '1',
'event_scheduler' => 'ON',
'plugin-load' => 'thread_pool.so',
'optimizer_switch' => 'index_condition_pushdown=off',
'log-error' => '/var/log/mysqld.log',
'pid-file' => '/var/run/mysqld/mysqld.pid',
# 'skip-name-resolve' => true, # descomente após instalar ambiente
'log_timestamps' => 'SYSTEM',
},
'mysqld_safe' => {
'log-error' => '/var/log/mysqld.log',
},
},
}
class { 'zabbix::database':
database_type => 'mysql',
database_collate => 'utf8_bin',
# zabbix_server => 'zabbix-srv-plat-prd01.network.ctbc',
# zabbix_web => 'zabbix-srv-plat-prd01.network.ctbc',
zabbix_server => '172.20.0.76',
zabbix_web => '172.20.0.76',
}
class { 'zabbix::agent':
zabbix_version => '3.0',
server => 'zabbix-srv-plat-prd01.network.ctbc, zabbix-poller-plat-prd01.network.ctbc, zabbix-poller-plat-prd02.network.ctbc, zabbix-poller-plat-prd03.network.ctbc, zabbix-poller-plat-prd04.network.ctbc',
}
}
node /zabbix-poller-plat-prd\d+.network.ctbc/ {
# Node(s) com Zabbix Proxy
file { '/var/lib/sqlite':
ensure => 'directory',
mode => '0777',
}
# Módulo que instala o Zabbix Proxy e
# gerencia o arquivo /etc/zabbix/zabbix_proxy.conf
class { 'zabbix::proxy':
zabbix_version => '3.0',
zabbix_server_host => 'zabbix-srv-plat-prd01.network.ctbc',
logfilesize => '0',
database_type => 'sqlite',
database_name => '/var/lib/sqlite/zabbix_proxy.db',
snmptrapper => '1',
# parametros alteraveis (em máq. com pouca RAM, não sobe)
startpollers => '500',
startpollersunreachable => '200',
startpingers => '200',
startdiscoverers => '50',
cachesize => '2G',
historycachesize => '1G',
historyindexcachesize => '512M',
# ----------------------------------------------
manage_firewall => true,
}
class { 'zabbix::agent':
zabbix_version => '3.0',
server => 'zabbix-srv-plat-prd01.network.ctbc, zabbix-poller-plat-prd01.network.ctbc, zabbix-poller-plat-prd02.network.ctbc, zabbix-poller-plat-prd03.network.ctbc, zabbix-poller-plat-prd04.network.ctbc',
serveractive => 'zabbix-srv-plat-prd01.network.ctbc, zabbix-poller-plat-prd01.network.ctbc, zabbix-poller-plat-prd02.network.ctbc, zabbix-poller-plat-prd03.network.ctbc, zabbix-poller-plat-prd04.network.ctbc',
}
}
define export_xml(
String $zabbix_url,
String $zabbix_user,
String $zabbix_pass,
String $output_valuemaps,
String $output_templates
) {
exec { "Exporting all ${name} valuemaps to a file":
command => "/opt/dump_zabbix.py $zabbix_url --user $zabbix_user --password $zabbix_pass --valuemap > $output_valuemaps",
path => ['/usr/bin', '/usr/sbin',],
}
exec { "Exporting all ${name} templates to a file":
command => "/opt/dump_zabbix.py $zabbix_url --user $zabbix_user --password $zabbix_pass > $output_templates",
path => ['/usr/bin', '/usr/sbin',],
}
}
# Configura o puppetdb no Puppet Master, essencial
# para importar os templates.
node puppet.puppet {
# Configure puppetdb and its underlying database
class { 'puppetdb': }
# Configure the Puppet master to use puppetdb
class { 'puppetdb::master::config': }
# O puppetdb ativa o iptables.
# Necessário abrir a porta 8140 nele.
firewall { '100 Allow Puppet master':
dport => 8140,
proto => tcp,
action => accept
}
export_xml { 'Rede Metro':
zabbix_url => 'http://zabbix-srv-metro-prd01/zabbix',
zabbix_user => 'zabbixapi',
zabbix_pass => 'b1ndz4bb1x@m3tr0',
output_valuemaps => '/etc/puppetlabs/code/environments/production/modules/zabbix/files/templates/valuemaps.xml',
output_templates => '/etc/puppetlabs/code/environments/production/modules/zabbix/files/templates/templates.xml'
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment