$ irbirb(main):001:0> require "etc"=> trueirb(main):002:0> Etc.getpwnam("ask")=> #<struct Struct::Passwd name="ask", passwd="*", uid=10000, gid=10000, gecos="Alexander Skwar", dir="/home/ask", shell="/usr/bin/zsh">
Ohai uses ruby’s
Etc.passwd
(https://github.com/chef/ohai/blob/master/lib/ohai/plugins/passwd.rb) to get user data which should include other sources that are in nsswitch.I know that Ohai includes external sources because it’s a very common for people with LDAP enabled to disable that particular Ohai plugin (since by default it’ll load your whole directory and store it in the node data).
There is, however, an issue when nsswitch changes after the Chef run has started. Because of a limitation in the underlying C library, those changes don’t get picked up by already running processes. (https://tickets.opscode.com/browse/CHEF-3780) Perhaps that’s your issue here?
Matt Moretti
On Wed, Sep 23, 2015 at 8:52 AM, Alexander Skwar (mailto: )" target="_blank"> (mailto: ) wrote:
HiI don't have knife, I'm using chef-solo. Should've mentioned this, sorry :/Well, but, no. For local users, ohai seems usable (→ "And "node['etc']['passwd']['local']" is not nil."). node['etc']['passwd']['root'] returns "something".But for not local users (which are in sssd), ohai doesn't seem to work. As I said, for users stored in IPA, I get "nil" (→ "But "node['etc']['passwd']['ask']" is "nil""), when I check node['etc']['passwd']['ipa-username'].What's the correct way to check if a user exists, if the user isn't local?Regards,Alexander--2015-09-23 14:13 GMT+02:00 Barthélemy Vessemont < " target="_blank"> >:Just use ohai !!!Ohai gather up all system user :
> knife search 'name:my-server' -a etc.passwd.root.uid -a etc.passwd.root.gid
my-server:
etc.passwd.root.gid: 0
etc.passwd.root.uid: 0--On Wed, Sep 23, 2015 at 10:15 AM, Alexander Skwar < " target="_blank"> > wrote:HelloWe're using an IPA server to store user accounts and such and Ubuntu clients with FreeIPA to access this. I would now like to do something, based on the existence of a user account in IPA.How can I check if a user exists?On Stack Overflow, I found this:
Ohai queries the users on the system for you:
if node['etc']['passwd']['random'] # Do deploy end
But this only works with local accounts; it does not work with accounts in IPA. In our nsswitch.conf, there's:$ grep passwd /etc/nsswitch.confpasswd: files sssWith getent, I can query accounts.$ getent passwd askask:*:10000:10000:Alexander Skwar:/home/ask:/usr/bin/zsh$ getent passwd example-does-not-exist$ getent passwd locallocal:x:1000:1000::/home/local:/bin/zsh"ask" is stored in IPA; "example-does-not-exist" is a non-existant account; "local" is a user from /etc/passwd.But "node['etc']['passwd']['ask']" is "nil". And "node['etc']['passwd']['local']" is not nil.How can I check if a user exists? Do I really have to resort to calling getent?Thanks,AlexanderBarthélemy Vessemont - " target="_blank">
Ingénieur en informatique diplômé de l'UTC (Compiègne)
Contributeur Chef ( )
Alexander -- => Google+ => http://plus.skwar.me <== => Chat (Jabber/Google Talk) => " target="_blank"> <==
Alexander -- => Google+ => http://plus.skwar.me <== => Chat (Jabber/Google Talk) => " target="_blank"> <==
Archive powered by MHonArc 2.6.16.