꼭두각시의 배열

꼭두각시의 배열

다음 꼭두각시 문제를 해결하는 방법이 궁금합니다. 문자열 배열을 기반으로 여러 파일을 만들고 싶습니다. 문제는 파일이 포함된 여러 디렉터리를 만들고 싶다는 것입니다.

dir1/
    fileA
    fileB
dir2/
    fileA
    fileB
    fileC

문제는 파일 리소스 제목이 고유해야 한다는 것입니다. 따라서 파일 이름을 배열에 유지하는 경우 파일 이름에 디렉터리 이름을 붙일 수 있도록 사용자 지정 방식으로 배열을 반복해야 합니다.

$file_names = ['fileA', 'fileB']
$file_names_2 = [$file_names, 'fileC']

file {'dir1': ensure => directory }
file {'dir2': ensure => directory }

file { $file_names: path = 'dir1', ensure =>present, }
file { $file_names_2: path = 'dir2', ensure =>present, }

파일 리소스 제목이 충돌하기 때문에 작동하지 않습니다. 따라서 파일 제목에 dir 이름 등을 추가해야 합니다. 그러나 이렇게 하면 파일 배열이 연결되어 여러 파일로 처리되지 않게 됩니다.

아아..

file { "${file_names}-dir1": path = 'dir1', ensure =>present, }
file { "${file_names_2}-dir2": path = 'dir1', ensure =>present, }

파일 리소스 자체를 반복할 필요 없이 이 문제를 해결하는 방법. 감사해요

답변1

regsubst()함수를 사용하여 문자열 배열을 수정하고 배열을 반환할 수 있습니다. 보다Puppet 기능 참조.

$filenames = ['fileA', 'fileB', 'fileC']
$filepaths_dir1 = regsubst($filenames, '^', '/path/to/dir1/')

file {$filepaths_dir1:
    ensure => present,
}

file리소스 제목은 정규화된 경로여야 하거나 매개변수를 사용하여 전체 경로를 지정해야 한다는 점에 유의하세요 path. 파일에 대해 지정하면 path => 'dir1'원하는 대로 수행되지 않을 수 있습니다.

답변2

이것을 사용한 지 꽤 시간이 지났지만 정의는 여러분이 원하는 것을 처리해야 합니다.

define myfiles::config ($directory_name, $file_name) {
  ; add command to create directories if needed

  file { "myfiles/conf.d/$directory_name/$file_name":
    ensure  => present,
    ...
  }

}

$directory_name= <from array>
$file_name= <from array>
; loop the following statement 
myfiles::config { "$directory_name-$file_name":
  directory_name => 'dir1',
  file_name   => 'file',
}

관련 정보