1

所以我有一个本地 DMG,我用 puppet (VirtualBox-4.2.18-88780-OSX.dmg) 安装它,我用它运行它

sudo puppet resource package virtualbox ensure=present provider=pkgdmg source=puppet:///virtualbox/VirtualBox-4.2.18-88780-OSX.dmg,

一切正常。但是当我尝试用 删除它时sudo puppet resource package virtualbox ensure=absent,我得到一个错误

Error: Could not set 'absent' on ensure: undefined method 'uninstall' for #<Puppet::Type::Package::ProviderPkgdmg:0x107cb8218>

我对为什么会发生这种情况有一个模糊的想法,它看起来不像 puppet 正在识别 virtualbox 卸载工具。我该如何解决?

4

2 回答 2

2

millmouse 是正确的 OS X 软件包不能卸载,至少通过这种方法。Puppet 不支持 appdmg 或 apppkg 提供程序上的“缺席”。

但是,您可以通过删除它创建的用于跟踪软件包已安装的“cookie”类文件来欺骗 Puppet 重新安装软件包。Puppet 使用OS X 上/var/db的模式创建文件;.puppet_<provider>_installed_<package_name>-<version>例如你会有一个像/var/db/.puppet_pkgdmg_installed_VirtualBox-4.2.18-88780

您可以执行以下操作,但它实际上不会卸载该应用程序,只会诱使 Puppet 允许它再次安装:

exec {'rm -f .puppet_pkgdmg_installed_VirtualBox-4.2.18-88780':
  cwd => /var/db/',
  user => 'root',
  onlyif => 'test -f /var/db/.puppet_pkgdmg_installed_VirtualBox-4.2.18-88780',
}

或者

file {'/var/db/.puppet_pkgdmg_installed_VirtualBox-4.2.18-88780':
  ensure => 'absent',
  force => true,
}

否则软件包的版本号或名称需要更改才能再次安装。

于 2014-01-21T02:17:57.483 回答
1

我会使用exec资源而不是资源来进行卸载package

exec { "uninstall_mypkg" :
  command => "uninstall mypkg",
  onlyif => "check if the package is installed",
  path => "/path/to/command/",
}
于 2013-09-09T18:55:18.660 回答