Passing a yaml throws errors on only some parameters

60 views
Skip to first unread message

Karolis Pabijanskas

unread,
Jan 13, 2014, 4:36:25 PM1/13/14
to puppet...@googlegroups.com


Hi list,

I have a define type with parameters like this:

define user (   $username=$title,
                $comment='',
                $uid='',
                $gid=$uid,
                $groups=[ 'users',],
                $password='',
                $shell="/bin/false",
                $sudo=false,
                $sudo_nopasswd=false, ) {
#### actual definition
}

That gets called by init.pp:

class users ($data) {
        create_resources(user, $data)
}

I'm trying to pass a yaml to it:
user:
  uid: 500
  comment: Test user
  password: PW HASH
  shell: /bin/bash

Now this works perfectly fine, and the user gets created, but as soon as I try to pass sudo it fails (it does the same for the sudo_nopasswd parameter):
user:
  uid: 500
  comment: Test user
  password: PW HASH
  shell: /bin/bash
  sudo: true

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter sudo on node puppet.local

It does not matter if I do anything with the sudo parameter. The default works, but as soon as I alter it via yaml it throws the error. There is no sudo class, not any other parameter containing "sudo" in the host yaml.


Any ideas what could be causing this?

Thanks!

Ramin K

unread,
Jan 13, 2014, 4:50:20 PM1/13/14
to puppet...@googlegroups.com
Hiera and booleans not playing nicely, I think.
http://projects.puppetlabs.com/issues/17105

and for workarounds,
https://groups.google.com/forum/#!topic/puppet-users/BLw91HEpP0I

Ramin

Karolis Pabijanskas

unread,
Jan 13, 2014, 5:07:58 PM1/13/14
to puppet...@googlegroups.com, ramin...@badapple.net
Thanks for this, however this is unlikely. This error is there even when the sudo and sudo_nopasswd variables are strings. Even if I pass something like:


user:
  uid: 500
  comment: Test user
  password: PW HASH
  shell: /bin/bash
  sudo: Whatever

I get the same error. The sudo_nopasswd might get set to "NOPASSWD" and that fails too with the same error.

I might also set:


define user (   $username=$title,
                $comment='',
                $uid='',
                $gid=$uid,
                $groups=[ 'users',],
                $password='',
                $shell="/bin/false",
                $sudo="disable",
                $sudo_nopasswd="disable", )

and then do check on that and then pass:
 sudo: enable

And it still fails with the same error

jcbollinger

unread,
Jan 13, 2014, 6:26:28 PM1/13/14
to puppet...@googlegroups.com
That appears to be telling you that Puppet doesn't think type "user" has a parameter named "sudo".  And indeed, the built-in User type doesn't, though it does have uid, comment, password, and shell.  Almost certainly, create_resources is trying to declare an instance of the built-in User type instead of your defined type.  The same might happen if you use an ordinary declaration.

You should put your defined type in a module, and refer to it by its qualifed name.  Indeed, all classes and defined types you write should go into modules.

As an aside, do not confuse Puppet's keyword for declaring a user-defined resource type ("define") with the C preprocessor's keyword for defining a macro ("#define").  User-defined resource types are bona fide resource types, not macros.


John

Reply all
Reply to author
Forward
0 new messages