Có thể sử dụng Puppet để đảm bảo có nhiều tệp trong một thư mục mà không cần xác định tất cả chúng không?


8

Tôi có một vài trăm máy chủ một lần có các tệp cấu hình khác nhau cần phải có trong một thư mục. Bản sao của các tập tin nằm trên con rối chủ.

Trong một trong các lớp của tôi, tôi có một bộ cấu hình mặc định luôn được đẩy đến nút, như vậy:

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

Những gì tôi muốn có là một cái gì đó như thế này:

$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",
}
)

Tôi không quen thuộc lắm với con rối nhưng tôi có ấn tượng rằng không có cách nào để làm điều này.


1
Bạn có thể ổn định với việc quản lý đệ quy thư mục mà những người này cư trú ( recurse => truetrên fileloại), thay vì khai báo mỗi tệp là một tài nguyên riêng biệt không?
Shane Madden

Câu trả lời:


8

Bạn có thể làm những gì bạn đang cố gắng với điều này:

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

Điều này sẽ sao chép tất cả các tệp trong $ fqdn sang / etc / someprogram / config, ghi đè nếu chúng đã tồn tại.


1
Ngoài ra, hãy xem recurse => remotenếu thư mục trong câu hỏi sẽ có các tệp cục bộ không được đẩy bởi máy chủ con rối.
Zoredache

Đó là một mẹo hay, tôi không biết điều này đã được thêm vào thông số kỹ thuật, được chỉnh sửa bản gốc để phản ánh điều này.
Meatflag

3

Nếu bạn muốn xác định nhiều tệp trong một thư mục mà không cần đệ quy toàn bộ thư mục, bạn có thể sử dụng một mảng - như thế này:

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

Tất nhiên, với các đường dẫn dài tới "/ my / dir" hoặc nhiều tệp, nó sẽ hơi khó sử dụng, vì vậy trong trường hợp đó, bạn nên tạo một định nghĩa bao gồm đường dẫn thư mục và chỉ cần vượt qua mảng tên tập tin cho nó.


tiếc là điều này không hoạt động khi bạn có một aliasbộ trên tệp: /
cweiske

1
Có vẻ như bạn có một lỗi đánh máy $ myfiles -> $ tập tin
Fabrizio Regini

1
Điều này sẽ không hoạt động. Bạn không thể tham khảo $nameở đây. Điều đó chỉ hoạt động nếu nó là một loại xác định.
mạo

1

Đây là một ví dụ về cách tôi làm điều này:

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

Trong ví dụ trên, tôi đang gán lịch trình I / O hạn chót cho từng đĩa trên một máy chủ nhất định thông qua Puppet.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.