错误 Duplicate declaration already exists Puppet
Error Duplicate declaration already exists Puppet
我在 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
我该如何解决?
最好的方法是使用单独的 class 文件资源进行重构,这样您就不会在同一主机上的两个 class 中得到相同的资源。
或者,您可以使用 virtual resources,在两个 classes:
@file { $pem_file_path:
ensure => 'present',
owner => 'root',
group => 'root',
mode => '0600',
content => $pem_file_content
}
realize File[$pem_file_path]
这在某种程度上违背了傀儡的本性。为什么要在两个不同的地方管理同一个文件并将其全部应用到同一个节点上?如果我是正确的,您将在两个人偶清单中从 Hiera 获取相同的数据并将它们传递给文件资源。因此,可以安全地删除一个,或者您可以在第三个人偶清单中将其解耦,只要有任何更改将这些更改应用回文件,它就会与文件 (~>) 建立通知关系
我在 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
我该如何解决?
最好的方法是使用单独的 class 文件资源进行重构,这样您就不会在同一主机上的两个 class 中得到相同的资源。
或者,您可以使用 virtual resources,在两个 classes:
@file { $pem_file_path:
ensure => 'present',
owner => 'root',
group => 'root',
mode => '0600',
content => $pem_file_content
}
realize File[$pem_file_path]
这在某种程度上违背了傀儡的本性。为什么要在两个不同的地方管理同一个文件并将其全部应用到同一个节点上?如果我是正确的,您将在两个人偶清单中从 Hiera 获取相同的数据并将它们传递给文件资源。因此,可以安全地删除一个,或者您可以在第三个人偶清单中将其解耦,只要有任何更改将这些更改应用回文件,它就会与文件 (~>) 建立通知关系