Apakah mungkin menggunakan Wayang untuk memastikan beberapa file dalam suatu direktori ada tanpa mendefinisikan semuanya?

8

Saya memiliki beberapa ratus satu server yang memiliki file konfigurasi berbeda yang harus ada dalam direktori. Salinan file berada di master boneka.

Di dalam salah satu kelas saya, saya memiliki serangkaian konfigurasi default yang selalu didorong ke node, seperti:

file { "/etc/someprogram/config/000-default":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/000-default",
}

Yang ingin saya miliki adalah sesuatu seperti ini:

$filearray = directory listing of /etc/puppet/modules/someprogram/files/$fqdn
with each file as an element into array

$filearray.each(
file { "/etc/someprogram/config/$filename":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/files/$fqdn/$filename",
}
)

Saya tidak terlalu terbiasa dengan boneka tetapi saya mendapat kesan tidak ada cara untuk melakukan ini.

Segar
sumber
1
Apakah Anda akan baik-baik saja dengan mengelola secara rekursif direktori ini berada ( recurse => truepada filetipe), daripada mendeklarasikan setiap file sebagai sumber daya yang terpisah?
Shane Madden

Jawaban:

8

Anda dapat melakukan apa yang Anda coba dengan ini:

file { "/etc/someprogram/config":
    ensure => directory,
    recurse => remote,
    source => "puppet:///modules/someprogram/files/$fqdn"
    #Other options
}

Ini akan menyalin semua file dalam $ fqdn ke / etc / someprogram / config, menimpa jika sudah ada.

daging cincang
sumber
1
Lihat juga recurse => remoteapakah direktori tersebut memiliki file lokal yang tidak didorong oleh server boneka.
Zoredache
Itu tip yang bagus, saya tidak tahu ini telah ditambahkan ke spec, diedit asli untuk mencerminkan ini.
meatflag
3

Jika Anda ingin mendefinisikan banyak file dalam suatu direktori tanpa mengulang seluruh direktori, Anda dapat menggunakan array - seperti ini:

$myfiles = [ "/my/dir/file1", "/my/dir/file2", ]
file { $myfiles:
    ensure => "present",
    owner  => "root",
    group  => "root",
    mode   =>  0644,
    source => "puppet:///modules/someprogram/$fqdn/$name",
}

Tentu saja, dengan jalur panjang ke "/ my / dir" atau banyak file, itu akan menjadi sedikit sulit, jadi dalam hal ini Anda akan lebih baik membuat mendefinisikan yang termasuk jalur direktori, dan hanya melewati array dari nama file untuk itu.

Paul Gear
sumber
sayangnya ini tidak berfungsi ketika Anda memiliki satu aliasset pada file: /
cweiske
1
Sepertinya Anda memiliki kesalahan ketik $ myfiles -> $ file
Fabrizio Regini
1
Ini tidak akan berfungsi. Anda tidak dapat referensi di $namesini. Itu hanya berfungsi jika itu adalah tipe yang ditentukan.
faker
1

Berikut adalah contoh bagaimana saya melakukan ini:

file {
        [
        '/sys/block/sda/queue/scheduler',
        '/sys/block/sdb/queue/scheduler',
        '/sys/block/sdc/queue/scheduler',
        '/sys/block/sdd/queue/scheduler',
        '/sys/block/sde/queue/scheduler',
        '/sys/block/sdf/queue/scheduler'
        ]:
  ensure  => 'file',
  content => 'deadline',
  group   => '0',
  mode    => '644',
  owner   => '0',
  type    => 'file',
}

Dalam contoh di atas, saya menetapkan batas waktu I / O scheduler untuk masing-masing disk pada server yang diberikan melalui Wayang.

Sam Caldwell
sumber