1

我在 mon.pp 文件中声明了这一点

  $pem_file_path = "/etc/ssl/private/${::environment}.pem"
  $defaults = hiera_hash('defaults')
  $subscription_id = $defaults['subscription_id']
  $pem_file_content = hiera('nb_monitoring::azure_limits_sa::pem_file_content')
  file { $pem_file_path:
  ensure  => 'present',
  owner   => 'root',
  group   => 'root',
  mode    => '0600',
  content => $pem_file_content
  }
  }

在另一个不同的模块中> azure_limits_sa.pp 我正在使用相同的东西

  # From ${::env}/mon.yaml
  $pem_file_content = hiera('nb_monitoring::azure_limits_sa::pem_file_content')

  file { $pem_file_path:
  ensure  => 'present',
  owner   => 'root',
  group   => 'root',
  mode    => '0600',
  content => $pem_file_content
 }

当我运行 puppet 时,出现此错误: Error: Duplicate declaration: File[/etc/ssl/private/dev1.pem] is already declared in file /tmp/vagrant-puppet/modules-2134b0ea668add24edb5ea5a9ee9f8a1/nb_tsg/manifests/mon.pp:25; cannot redeclare at /tmp/vagrant-puppet/modules-2134b0ea668add24edb5ea5a9ee9f8a1/nb_monitoring/manifests/azure_limits_sa.pp:43 on node dev1-mon1

我该如何解决这个问题?

4

2 回答 2

1

最好的方法是为文件资源重构一个单独的类,这样您就不会在同一主机上的两个类中使用相同的资源。

或者,您可以在两个类中使用虚拟资源

 @file { $pem_file_path:
  ensure  => 'present',
  owner   => 'root',
  group   => 'root',
  mode    => '0600',
  content => $pem_file_content
 }
 realize File[$pem_file_path]
于 2016-01-30T11:11:45.760 回答
1

这在某种程度上违背了傀儡的本性。为什么要在两个不同的地方管理同一个文件并将其全部应用到同一个节点上?如果我是正确的,您将在两个 puppet 清单中从 Hiera 获取相同的数据并将它们传递给 File 资源。因此,可以安全地删除一个,或者您可以在第三个 puppet manifest 中将其解耦,该清单将与文件 (~>) 有通知关系,只要发生更改以将这些更改应用回文件

于 2016-02-01T21:06:01.860 回答