0

我正在遍历一个数组,并希望使用该键作为逻辑的一部分来查找 Ohai 值。source在我的特殊情况下,如果从以前的资源触发,我会尝试每个定义的用户的 .bashrc。

欧海结构:

"etc": { "passwd": { "root": { "dir": "/root", "gid": 0, "uid": 0, "shell": "/bin/bash", "gecos": "root" }, ... "foo": { "dir": "/home/foo", "gid": 501, "uid": 501, "shell": "/bin/bash", "gecos": "" }, ...

因此,当我遍历时,我正在尝试执行以下操作:

node['my_cookbook']['managed_users'].each do |usr| bash 'reload_shell' do code "source #{node['etc']['passwd'][usr]['dir']}/.bashrc" action :nothing end end

我也尝试过使用['usr'],[#{usr}]["usr"]符号,以及转义引号。

4

1 回答 1

1

要遍历 ruby​​ 中的哈希并访问您可以执行的密钥:

node['my_cookbook']['managed_users'].each do |usr,props|
  bash 'reload_shell' do
    code "source #{node['etc']['passwd'][usr]['dir']}/.bashrc"
    action :nothing
  end
end

如果您不关心键或其下的值,_请在您的情况下用 ie 替换相应的变量:

node['my_cookbook']['managed_users'].each do |usr,_|
  bash 'reload_shell' do
    code "source #{node['etc']['passwd'][usr]['dir']}/.bashrc"
    action :nothing
  end
end

如果不这样做,您将获得完整的底层哈希,因此您的usrvar 是

{
  "root": {
    "dir": "/root",
    "gid": 0,
    "uid": 0,
    "shell": "/bin/bash",
    "gecos": "root"
}

而不仅仅是“根”。

旁注:采购适用于当前外壳,在 bash 资源中生成外壳,执行命令并关闭外壳。获取文件不会产生任何影响(除非 .bash_rc 中有一个复杂的进程在做某事,这不会影响系统或厨师运行)

于 2015-06-30T07:24:23.607 回答