在Puppet中从hiera hash获得价值

我在我的hiera文件中有这样的结构,它在我的smb.conf中创build了一些规​​则。

samba::shares: PDF: - comment = "PDF" - path = /home/smb/pdf - browseable = yes - hide dot files = yes - read only = no - public = yes - writable = yes - create mode = 0775 - printable = no Partage: - comment= "Partage" - path = /home/smb/Partage - browseable = yes - hide dot files = yes - read only = no - public = yes - writable = yes - create mode = 0775 - printable = no 

我想访问每个共享的path自动创build具有正确的保留的文件夹。

我用hiera_hash()尝试了很多解决scheme,但找不到合适的设置。 :

 define create_folder{ # I want to loop on PDF, Partage, etc. and extract path # for each one (/home/smb/pdf, /home/smb/Partage, etc.). $path = hiera_hash('path') file{"$path": path => $path, ensure => diretory, owner => "smb", group => "smb", require => File["/home/smb/"], mode => '775', } } 

你能帮我吗 ?

问候。

这是create_resources方法的一个应用程序。

在你的情况下,你不会从资源内部获取散列,而是从外部获取:

 # puppet/site.pp create_resources(create_folder, hiera_hash('samba::shares', {})) # puppet/modules/... define create_folder( $comment, $path, $browseable, $hide_dot_files, $read_only, $public, $writable, $create mode, $printable, ){ file{"$path": path => $path, ensure => diretory, owner => "smb", group => "smb", require => File["/home/smb/"], mode => '775', } } 

hiera_hash 第二个参数是一个默认值。 为了能够在所有机器上加载资源,我宁愿始终保留一个空的哈希,即使只有某些机器具有定义的值。

最后,我添加一个运行everty时间傀儡运行的脚本:

 #!/bin/bash folders=($(cat /etc/samba/smb.conf | grep path | cut -d" " -f3)) for folder in "${folders[@]}" ; do if [ ! -d "$folder" ]; then mkdir -p "$dossier" chown -R smb:smb "$folder" chmod -R 775 "$folder" fi done 

问候。