Setup Tomcat com Puppet (pergunta noob)

2

Eu tenho aprendido o Puppet (como nas últimas 24 horas) e criei o módulo a seguir para instalar o Tomcat. Ele funciona muito bem, mas não posso deixar de sentir que essa não é a maneira mais ideal de fazer isso - particularmente em torno da name[1-4] part e das etapas / dependências. Se um " Puppet Master " :) puder dar uma olhada no que estou fazendo e sugerir melhorias, eu ficaria muito grato.


class tomcat {
  ####                                                                                
  # Tomcat                                                                            

  # Variables                                                                         
  $tomcatVersionedDir="/usr/local/apache-tomcat-6.0.29"
  $tomcatDir="/usr/local/tomcat"
  $tomcatBinDir="${tomcatDir}/bin"
  $tomcatDaemonSrcDir="${tomcatBinDir}/commons-daemon-1.0.2-native-src"

  # 1) Get the package                                                                
  file { "/root/tomcat6.tgz":
    ensure => "file",
    source => "puppet://puppet/tomcat/tomcat6.tgz",
  }

  # 2) Untar the package                                                              
  define tomcat_expand() {
    exec { "/bin/tar xzf /root/tomcat6.tgz":
      cwd => "/usr/local",
      creates => $tomcatVersionedDir,
    }
  }
  tomcat_expand { name1:
    require => File["/root/tomcat6.tgz"],
  }

  # 3) Create the symlink                                                             
  file { "${tomcatDir}":
    ensure => $tomcatVersionedDir,
    require => Tomcat_expand["name1"],
  }

  # 4) Daemon source expand                                                           
  define tomcat_daemon_expand() {
    exec { "/bin/tar xzf commons-daemon-native.tar.gz":
      cwd => "${tomcatDir}/bin",
      creates => "${tomcatDaemonSrcDir}",
    }
  }
  tomcat_daemon_expand { name2:
    require => File["${tomcatDir}"],
  }

  # 5) Configure daemon                                                               
  define tomcat_daemon_config() {
    exec { "./configure > puppet-config.out":
      path => "/bin:/usr/bin:.",
      cwd => "${tomcatDaemonSrcDir}/unix",
      creates => "${tomcatDaemonSrcDir}/unix/puppet-config.out",
    }
  }
  tomcat_daemon_config { name3:
    require => Tomcat_daemon_expand["name2"],
  }

  # 6) Compile daemon                                                                 
  define tomcat_daemon_compile() {
    exec { "make clean && make":
      path => "/bin:/usr/bin:.",
      cwd => "${tomcatDaemonSrcDir}/unix",
      creates => "${tomcatDaemonSrcDir}/unix/jsvc",
    }
  }
  tomcat_daemon_compile { name4:
    require => Tomcat_daemon_config["name3"],
  }

  # 7) Copy jsvc to bin directory                                                     
  file { "${tomcatBinDir}/jsvc":
    source => "${tomcatDaemonSrcDir}/unix/jsvc",
    require => Tomcat_daemon_compile["name4"],
  }
}

Este estilo está correto?

Outra coisa ... já que isso está fazendo coisas como descompactar código para uma tarefa, existe uma boa maneira de limpar, mantendo o fluxo através das etapas? Por exemplo, excluindo o diretório commons-daemon-1.0.2-native-src depois que jsvc foi copiado para bin ?

    
por Peter Sankauskas 30.07.2010 / 00:59

2 respostas

5

Parece muito "processual", IMO. Você tem que pensar de uma maneira "declarativa". Eu pessoalmente apenas criaria .rpm's ou .debs daqueles tarballs, e especificaria outro repo para usar, então tudo que você teria que fazer seria algo assim:

 class tomcat {
   Package { "tomcat":
      ensure => installed,
   }

   File { "/etc/init.d/tomcat":
      source => "puppet:///tomcat/tomcat.initd",
   }
 }

Essas múltiplas configurações também parecem desnecessárias, eu usaria apenas cláusulas de Exec, mas com aliases para cada tipo de Exec.

Exemplo:

 Exec { "/bin/tar xzf /root/tomcat6.tgz":
   name => "tomcat-extract",
   <rest of content here>
 }

 ...

 File { "${tomcatDir}":
   ...
   require => Exec["tomcat-extract"],
   ...
 }
    
por 19.08.2010 / 08:18
1

Revisitando um tópico muito antigo para os futuros visitantes - você pode obter o tomcat6 rpms do link e instalar a partir deles ( diretamente de um espelho de repo, ou através de seu próprio repo local).

Não sei como é a situação dos debs.

    
por 12.11.2010 / 19:33