Giter Club home page Giter Club logo

gepeto's Introduction

Gepeto

uma ferramenta de validação de regras de puppet para os projetos com o intuito de facilitar a padronização de regras e agilizar a busca e correção de erros.

Como usar

gepeto <comando> [parametros]

Commandos Principais

Rpm build

Geração do RPM do repositório indicado

gepeto rpmbuild <REPOSITORY_DIR>

Onde:

  • REPOSITORY_DIR: caminho do repositorio do projeto a ser construido

Exemplo:

gepeto rpmbuild ~/meu-querido-projeto/

Dependências:

  • É necessário ter serviço docker rodando na localhost

Rpm install

Instalação do RPM

gepeto rpminstall <RPM_PATH> -r <REPOSITORY_DIR>

Onde:

  • RPM_PATH: caminho do arquivo RPM gerado com o comando rpmbuild
  • REPOSITORY_DIR: caminho do repositorio do projeto a ser construido

Parâmetros:

-r: diretório do repositório

Extra Repos

O projeto deve ter um arquivo .extra_repos com os repositórios extras a serem incluídos. Os projetos com ruby 1.8, por exemplo, precisam desse arquivo com a linha ruby18.

Exemplo:

gepeto rpminstall ./var/projeto/projeto-1.0.0.el6.rpm ~/projeto/

Dependências:

  • É necessário ter serviço docker rodando na localhost

Puppet

Provisionamento de teste de puppet em docker gepeto puppet <PUPPET_DIR> <PUPPET_MODULE> [app_environment] [rpm a ser instalado no fim]

Onde:

  • PUPPET_DIR: caminho da raiz do puppet repository clonado.
  • PUPPET_MODULE: nome do modulo do puppet a ser provisonado.

Parâmetros:

-e: environment ex.: -e production (stage é o padrão)

-r: role: ex.: -e cms

-p: rpm: Path do rpm gerado (ele é gerado, por padrão, dentro do projeto gepeto) ex.: -p ./var/meuprojeto/projeto1.0.0.0-1.el6.x86_64.rpm

Exemplo:

gepeto puppet ~/puppet-manifests/ meuprojeto -e production -r cron

Dependências:

  • É necessário ter serviço docker rodando na localhost

Lint

Validação de estrutura / conteúdo de módulo puppet e projeto

gepeto lint -p <PUPPET_MODULE_DIR> -r <REPOSITORY_DIR>

Onde:

  • PUPPET_MODULE_DIR: caminho do módulo do puppet a ser validado.
  • REPOSITORY_DIR: caminho do projeto onde está o arquivo .spec.

Parâmetros:

-p: puppet

-r: repositório

Exemplo:

gepeto lint ~/projects/puppet/modules/cmsveja ~/projets/cmsveja

Estrutura

As regras de validação são plugins armazenados em arquivos .rb dentro da pasta lib/plugins/lint. Existem dois tipos de plugin.

  • Plugin como classe que recebe os diretórios como parâmetro e pode fazer tratamento cruzando informações, por exemplo, dos puppets, spec e Makefile
class WelcomePlugin < Gepeto::LintPlugin
  def call(env, puppet, repo)
    puts ['Validando modulo', puppet.red, 'e repo', repo.red, 'com', env.plugins.count.to_s.blue, 'plugins'].join(' ')
  end
end
  • Plugin para tratar linhas - Na verdade há um plugin como o acima que varre linha a linha emitindo eventos para que plugins se registrem tratando-as. Exemplo de regra:
on(:any_line) do |env, scope, file, line, lineno|
  env.errors.add(scope, file, line, lineno, "Não deveria referenciar /var/app - usar /opt/app") if line.include?('/app/')
end

on(:puppet_line) do |env, scope, file, line, lineno|
  env.errors.add(:puppet, file, line, lineno, "Não deveria gerenciar usuários - mover para spec") if line =~ /useradd|adduser/
  env.errors.add(:puppet, file, line, lineno, "Não deveria gerenciar grupos - mover para spec") if line =~ /groupadd|addgroup/
end

Emitindo Validações

Os plugins devem registrar os erros encontrados utilizando a chamada:

env.errors.add(escopo, file, linecontent, line_no, message)

Para registrar warnings, a chamada é parecida:

env.warnings.add(escopo, file, linecontent, line_no, message)

TODO

  • Validar estrutura do modulo puppet (manifests/init.pp, manifests/config.pp, ...)
  • Validar estrutura do projeto (Makefile, .spec)
  • Identificar tipo de projeto (rails, node, sinatra, java) e verificar dependências no RPM
  • Identificar pacotes requisitados no puppet que deveriam ser movidos para o spec
  • Identificar criação de diretorios no puppet que deveriam estar no spec
  • Identificar arquivos de log em diretorios invalids (http -> /var/log/httpd, aplicação -> /var/log/
  • Plugin para puppet lint
  • Verificar endereço ip hardcoded no codigo do projeto (ao menos no config)
  • Verificar nome de dominio hardcoded nas configurações do projeto
  • [v] Comando para criacao de rpm via docker
  • Comando para instalacao de rpm gerado via docker
  • [v] Comando para provisionamento de imagem docker via puppet

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.