通过 Puppet 安装带有依赖项的 Tomcat7 的最简单方法是什么?

通过 Puppet 安装带有依赖项的 Tomcat7 的最简单方法是什么?

我正在尝试构建如下简单的 Puppet 配方:

package { 'openjdk-7-jre-headless' :  ensure => installed, }
package { 'tomcat7-common' :          ensure => installed, }
package { 'tomcat7' :                 ensure => installed, require  => Package['tomcat7-common'],}
package { 'tomcat7-admin' :           ensure => installed, require  => Package['tomcat7-common'], }

但是运行时sudo puppet apply -v tomcat7.pp,仍然出现这些错误:

错误:/Stage[main]//Package[tomcat7-common]/ensure:从清除更改为呈现失败:执行“/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install tomcat7-common”返回 100:正在读取软件包列表...

以下软件包具有未满足的依赖项:tomcat7-common:

依赖:libtomcat7-java(>= 7.0.28-4+deb7u1)但是它将不会被安装

E:无法纠正问题,您持有破损的包裹。

每次添加新包时,我的文件都会变大,很难阅读。我真的需要手动指定所有 Tomcat 依赖项吗?或者有没有更简单的方法?

答案1

Puppet 应该自动处理依赖关系,因此应该起作用的简单清单是:

package { [ 'tomcat7', 'tomcat7-admin' ]: ensure => installed, }

但是,根据问题(例如安装了旧的 Tomcat 或依赖项损坏),这些问题应该手动解决。例如,通过手动运行apt-get tomcat7并检查是什么阻止了它(例如'以下软件包将被删除' 部分)。

使用 Puppet,有以下解决方法:

package { "tomcat7":
  ensure  => latest,
  require  => Exec['apt-get update'],
}

或者通过定义absent(或purged),例如:

package { [ 'tomcat6', 'tomcat6-common', 'libtomcat6-java','solr-tomcat' ]:
  ensure => absent
}

以确保机器上没有安装冲突的包。

相关内容