我在我的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
问候。