傀儡重复资源和虚拟资源

hok*_*key 5 puppet

概述

我刚开始使用 Puppet,一直无法解决某些问题。

问题

由于规范化,当我将两个类添加到具有相同依赖项的包的节点时,它会失败。

简单来说有重复的资源——在这种情况下是包libssl

注意:保留软件包以防止安装最新的软件包。

解决这个问题的最佳实践方法是什么?

class ssh {
  package { 'openssh-server':
    ensure  => installed,
    require => Package['libssl'],
  }
  package { 'libssl': ensure => installed, }
}

class apache {
  package { 'apache':
    ensure   => installed,
    require  => Package['libssl'], 
  }        
  package { 'libssl': ensure => installed, }
}

node server {
  include apache
  include openssl-server
Run Code Online (Sandbox Code Playgroud)

kas*_*ani 7

您有两个看起来几乎相同的选择。

1:让它成为自己的类。

class ssh {
  package { 'openssh-server':
    ensure => present,
    require => Class['ssl'],
  }
}
class ssl {
  package { 'libssl': ensure => present, }
}
Run Code Online (Sandbox Code Playgroud)

2:虚拟资源

class vpackages {
  @package { 'libssl': }
}
class ssh {
  include vpackages
  package { 'openssh-server':
    ensure => present,
    require => Package['libssl'],
  }
  realize Package['libssl']
}
Run Code Online (Sandbox Code Playgroud)

我发现将依赖项分解为它们自己的模块而不是使用虚拟资源更好。


Jer*_*use 2

如果您使用标准包管理来管理通过 Puppet 安装的包,那么您应该能够放弃libsslPuppet 中的包依赖项,因为大多数系统上的包管理系统都会自动处理这些依赖项。

在 Debian/Ubuntu 以及 RedHat/CentOS/SuSE 系统上,包管理工具将查找依赖项,除非您竭尽全力阻止默认行为,否则当 Puppet 告诉系统安装时,将包含其他依赖包包裹(在您的情况下简单openssh-serverapache