Pet*_*kas 2 tomcat puppet tomcat6
我一直在学习 Puppet(就像过去 24 小时一样)并提出了以下模块来安装 Tomcat。它工作得很好,但我不禁觉得这不是执行此操作的最佳方法 - 特别是在name[1-4]零件和步骤/依赖项周围。如果“傀儡大师”:) 能看看我在做什么并提出改进建议,我将不胜感激。
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"],
}
}
Run Code Online (Sandbox Code Playgroud)
这个款式好吗?
另一件事......因为这是为一个任务解包代码之类的事情,有没有一种好的方法来做清理,同时仍然保持整个步骤的流程?例如,删除commons-daemon-1.0.2-native-src目录后jsvc已复制到bin?
小智 5
IMO,它看起来太“程序化”了。你必须以“声明式”的方式思考。我个人只是从这些 tarball 中创建 .rpm 或 .deb,并指定另一个要使用的存储库,因此您所要做的就是这样:
class tomcat {
Package { "tomcat":
ensure => installed,
}
File { "/etc/init.d/tomcat":
source => "puppet:///tomcat/tomcat.initd",
}
}
Run Code Online (Sandbox Code Playgroud)
等等。这些多个定义似乎也没有必要,我只使用直接的 Exec 子句,但每个 Exec 类型都有别名。
例子:
Exec { "/bin/tar xzf /root/tomcat6.tgz":
name => "tomcat-extract",
<rest of content here>
}
...
File { "${tomcatDir}":
...
require => Exec["tomcat-extract"],
...
}
Run Code Online (Sandbox Code Playgroud)