如何从puppet master到3个不同的代理位置复制和安装3个不同的文件

时间:2017-04-20 20:52:41

标签: puppet puppet-enterprise

我创建了一个模块,用于从主服务器复制一个文件并安装到代理程序,它可以正常使用下面的代码:但是现在我正在尝试将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',
    }
}

1 个答案:

答案 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'],
}