Как скопировать и установить 3 разных файла из puppet master в 3 разных местоположения агента

Я создал модуль для копирования одного файла с мастера и установки на агенты, и он отлично работает с приведенным ниже кодом: но теперь я пытаюсь скопировать 3 разных файла в разные каталоги и установить каждый на другой набор узлов. (это похоже на диапазон имен ips или dns, называемых системами A...) Например: файл A необходимо установить на всех агентах в узлах систем A. Файл B необходимо установить на все агенты в узлах систем B Файл C необходимо установить на все агенты в узлах систем C

[или вы можете думать об этом как: файл1 должен быть установлен на всех серебряных системах.] и так далее для файлов2 и файл3

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

person Moez    schedule 20.04.2017    source источник


Ответы (1)


Предполагая, что вы имеете в виду среду Puppet, проверьте переменную $::environment для «A», «B» и «C», затем установите новую переменную для исходного файла и новую переменную для целевого пути в зависимости от того, в какой среде он находится.

Используя оператор if:

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 для проверки только одной переменной. :

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'],
}
person Dominic Cleal    schedule 21.04.2017
comment
Спасибо за ответ, но я должен был сказать не environemt , а наборы узлов ... например, мне нужно, чтобы file1 был установлен на всех серебряных системах / узлах. Возможно, я могу использовать поиск с помощью dns, но изо всех сил пытаюсь определить правильный код. - person Moez; 24.04.2017
comment
Что такое серебряная система? Без дополнительной информации о том, как вы классифицируете свои узлы, невозможно дать полезный ответ. - person Dominic Cleal; 25.04.2017
comment
В любом случае, как бы вы ни классифицировали свою систему, этот ответ должен быть применим — просто измените имя переменной $environment на то, что вы используете, например. $colour. - person Dominic Cleal; 25.04.2017