木偶中的數組

木偶中的數組

我想知道如何解決以下木偶問題:我想基於字串陣列建立多個檔案。複雜的是我想用這些檔案建立多個目錄:

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

這不起作用,因為文件資源標題衝突。因此,我需要將目錄名稱附加到文件標題,但是,這將導致文件數組被連接起來,而不是被視為多個文件...

呃..

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

如何解決這個問題而不需要重複文件資源本身。謝謝

答案1

您可以使用regsubst()函數修改字串陣列並傳回一個陣列。看人偶函數參考

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

相關內容