繁体   English   中英

如何使用Puppet和ruby打印所有Linux用户?

[英]How to print all linux users with Puppet and ruby?

我想创建一个返回所有用户的事实。

Facter.add("sysusers") do
  setcode do
    File.readlines('/etc/passwd').each do |line|
      line.match(/^[^:]+/)[0]
    end
  end
end

然后在我的.pp文件中,我有这个:

$users = inline_template("<%= scope.lookupvar('sysusers') %>")

$users.each |String $user| {
  notify { "$user":}
}

这应该可以,但是事实者一次只返回一个字母。

因此, notify { "$user":}仅打印:

Notify[r]
Notify[o]

然后它发疯了,因为下一个字母也是“ o”(“ root”中有两个o,而root是/ etc / passwd中指定的第一个用户)。

那么如何打印所有用户?

编辑
编辑为:

Facter.add("sysusers") do
  setcode do
    File.readlines('/etc/passwd').each do |line|
      line.match(/^[^:]+/).to_s
    end
  end
end

然后输出是:

root@mymachine]# facter sysusers
[
  "root:x:0:0:root:/root:/bin/bash
",
  "bin:x:1:1:bin:/bin:/usr/bin/nologin
",
  "daemon:x:2:2:daemon:/:/usr/bin/nologin
...
...

因此,它似乎仍然无法正常工作。

这是您想要的比赛。

line.match(/^[^:]+/).to_s

当您添加[0]时,它将使用字符串中的第一个字符作为用户名。

编辑

File.readlines('/etc/passwd').collect do |line|
        line.match(/^[^:]+/).to_s
end

这将收集要在您的setcode中返回的数组。

解析/etc/passwd是解决问题的笨拙方法。

使用Etc模块更干净

require 'etc'
result = []
Etc.passwd { |user| result << user.name }
result

使用以下红宝石代码,该代码从/ etc / passwd文件读取并打印用户名。

IO.readlines("/etc/passwd").each do |val|
        user = val.split(":").first
        puts user
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM