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

如何将3个不同的文件从puppet master复制并安装到3个不同的代理位置,puppet,puppet-enterprise,Puppet,Puppet Enterprise,我创建了一个模块,将一个文件从主机复制并安装到代理,它与下面的代码配合得很好:但现在我尝试在不同的目录中复制3个不同的文件,并将每个文件安装在不同的节点集上。 (类似于一系列称为系统的IP或dns名称…) 例如:文件A需要安装在系统节点中的所有代理上。 文件B需要安装在B系统节点中的所有代理上 文件C需要安装在C系统节点中的所有代理上 [或者您可以认为:file1需要安装在所有silver系统上。]对于file2和file3,依此类推 class profile::ma { file {

我创建了一个模块,将一个文件从主机复制并安装到代理,它与下面的代码配合得很好:但现在我尝试在不同的目录中复制3个不同的文件,并将每个文件安装在不同的节点集上。 (类似于一系列称为系统的IP或dns名称…) 例如:文件A需要安装在系统节点中的所有代理上。 文件B需要安装在B系统节点中的所有代理上 文件C需要安装在C系统节点中的所有代理上

[或者您可以认为:file1需要安装在所有silver系统上。]对于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',
    }
}

假设您指的是Puppet环境,请测试“A”、“B”和“C”的
$::environment
变量,然后根据其所在的环境为源文件设置一个新变量,为目标路径设置一个新变量

使用:

您还可以使用仅测试一个变量:

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

谢谢你的回复-但我应该说的不是环境,而是节点集。。。就像我需要在所有silver系统/节点上安装file1一样。可能我可以使用dns查找,但什么是正确的代码什么是“银色系统”?如果没有关于如何对节点进行分类的更多信息,则无法给出有用的答案。在任何情况下,无论如何对系统进行分类,此答案都应该适用-只需将
$environment
变量名称更改为您使用的任何名称,例如
$color
file { $target_file:
    ensure  => 'present',
    replace => 'no',
    source  => "puppet:///module/files/${source_file}",
    mode   => '0755',
    notify  => Exec['install'],
}