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