Bash 使用主目录作为puppet域的自定义事实

Bash 使用主目录作为puppet域的自定义事实,bash,puppet,theforeman,facter,Bash,Puppet,Theforeman,Facter,我正在尝试生成一个名为domains的自定义事实。 其想法是列出/home中的所有目录,但删除一些默认目录,例如centos,ec2 user,myadmin 我使用bash,因为我不知道ruby。到目前为止,我的脚本将列表输出到一个txt文件中,然后在其中查找因子的答案。但它被视为一个长答案,而不是像数组一样的多个答案 我的脚本如下: #!/bin/bash ls -m /home/ | sed -e 's/, /,/g' | tr -d '\n' > /tmp/domains.txt

我正在尝试生成一个名为domains的自定义事实。 其想法是列出
/home
中的所有目录,但删除一些默认目录,例如
centos
ec2 user
myadmin

我使用bash,因为我不知道ruby。到目前为止,我的脚本将列表输出到一个txt文件中,然后在其中查找因子的答案。但它被视为一个长答案,而不是像数组一样的多个答案

我的脚本如下:

#!/bin/bash

ls -m /home/ | sed -e 's/, /,/g' | tr -d '\n' > /tmp/domains.txt  
cat /tmp/domains.txt | awk '{gsub("it_support,", "");print}'| awk  '{gsub("ec2-user,", "");print}'| awk '{gsub("myadmin,", "");print}'| awk  '{gsub("nginx", "");print}'| awk '{gsub("lost+found,", "");print}' >  /tmp/domains1.txt
echo "domains={$(cat /tmp/domains1.txt)}"

exit
Foremans将我的领域视为

facts.domains = "{domain1,domain2,domain3,domain4,lost+found,}"
我还需要删除
lost+found,
一些方法

任何帮助或建议都将不胜感激


Kevin

我对ruby也不熟悉,但我有一些解决办法:

请看下面的例子。现在,要创建域_数组事实,请使用以下代码:

Facter.add(:domain_array) do
  setcode do
  domains = Facter.value(:domains)
  domain_array = domains.split(',')
  domain_array
  end
end

您可以放置一个解析器函数来执行此操作。解析器函数包括:

 modules/<modulename>/lib/puppet/parser/functions/getdomain.rb
您可以从清单中调用它并将其分配给变量:

$myhomedomains=getdomain()
$myhomedomains
应该返回类似的内容:
user1、user2、user3

  .......
对于具有类似代码的自定义事实。你可以把它放在:

 modules/<modulename>/lib/facter/getdomain.rb
您可以在任何清单中调用
getdomain
事实,例如,从同一模块的
init.pp
调用它:

 notify { "$::getdomain" : }
将导致类似的结果:

Notice: /Stage[main]/Testmodule/Notify[user1,user2,user3]

这将在木偶大师身上运行,这就是@Kevin的要求吗?
 notify { "$::getdomain" : }
Notice: /Stage[main]/Testmodule/Notify[user1,user2,user3]