我创建了一个模块,用于从主服务器复制一个文件并安装到代理程序,它可以正常使用下面的代码:但是现在我正在尝试将3个不同的文件复制到不同的目录中,并将每个文件安装在不同的节点集上。 (它就像一系列称为A系统的ips或dns名称......) 例如:需要在A系统节点中的所有代理上安装文件A. 需要在B系统节点中的所有代理上安装文件B. 需要在C Systems节点中的所有代理上安装文件C
[或者您可以将其视为:需要在所有银系统上安装file1。]依此类推,对于file2和file3
class profile::ma {
file { '/tmp/filename.sh':
ensure => 'present',
replace => 'no',
source => 'puppet:///module/files/filename.sh',
mode => '0755',
notify => Exec['install'],
}
exec { 'install':
command => '/tmp/filename.sh -i',
onlyif => '/usr/bin/test ! -e /etc/filetocheck',
}
}
答案 0 :(得分:0)
假设您的意思是Puppet环境,请测试$::environment
变量的'A','B'和'C',然后为源文件设置一个新变量,并为目标路径设置一个新变量它在哪个环境中。
使用if statement:
if $::environment == 'A' {
$source_file = 'filename_A.sh'
$target_file = '/tmp/filename_A.sh'
} elsif $environment == 'B' {
$source_file = 'filename_B.sh'
$target_file = '/tmp/filename_B.sh'
# and so on
}
您还可以使用case statement仅测试一个变量:
case $::environment {
'A': {
$source_file = 'filename_A.sh'
$target_file = '/tmp/filename_A.sh'
}
'B': {
$source_file = 'filename_B.sh'
$target_file = '/tmp/filename_B.sh'
}
}
然后使用这些变量而不是硬编码值:
file { $target_file:
ensure => 'present',
replace => 'no',
source => "puppet:///module/files/${source_file}",
mode => '0755',
notify => Exec['install'],
}