8

I am trying to get puppet to assign authorized ssh keys for virtual users but I keep getting the following error:

err: Could not retrieve catalog: Could not parse for environment production: Syntax error at 'user'; expected '}' at /etc/puppet/modules/users/manifests/ssh_authorized_keys.pp:9

I believe my configuration are correct (listed below) but is there a syntax error or scoping issue I am missing? I would simply like to assign users to nodes and have those users automagically have their ssh keys installed. Is there maybe a better way to do this and I'm just overthinking it?

# /etc/puppet/modules/users/virtual.pp

class user::virtual {
  @user { "user":
    home => "/home/user",
        ensure => "present",
        groups => ["root","wheel"],
        uid => "8001",
        password => "SCRAMBLED",
        comment => "User",
        shell => "/bin/bash",
    managehome => "true",
  }

# /etc/puppet/modules/users/manifests/ssh_authorized_keys.pp

ssh_authorized_key { "user":
  ensure => "present",
  type => "ssh-dss",
  key => "AAAAB....",
  user => "user",
}


# /etc/puppet/modules/users/init.pp

import "users.pp"
import "ssh_authorized_keys.pp"

class user::ops inherits user::virtual {
        realize(
                User["user"],
        )
}

# /etc/puppet/manifests/modules.pp

import "sudo"
import "users"

# /etc/puppet/manifests/nodes.pp

node basenode {
  include sudo
}

node 'testbox' inherits basenode {
  include user::ops 
}

# /etc/puppet/manifests/site.pp

import "modules"
import "nodes"

# The filebucket option allows for file backups to the server
filebucket { main: server => 'puppet' }

# Set global defaults - including backing up all files to the main filebucket and adds a global path
File { backup => main }
Exec { path => "/usr/bin:/usr/sbin/:/bin:/sbin" }

4 Answers 4

15

You're missing a closing brace at the end of virtual.pp.

7

Here's a puppet module I wrote a year ago for managing users for a previous employer.

2
  • This looks so complicated...
    – SamK
    Nov 16, 2011 at 9:01
  • 3
    It was the simplest thing that I came up with that worked. Everywhere I asked for help or other approaches I was told "use LDAP", which was a non-answer for only 10 users, since we didn't use LDAP anywhere else, and had to support 3 physical sites.
    – jtimberman
    Nov 20, 2011 at 1:43
3

Yes there is a better way, this is exactly what definitions are for. You would create a definition called something like "ssh_user", make virtual users of that type, then realize those. Josh's code makes use of a define like I am talking about, but you would also add the ssh_authorized_key in the define, parameterized with variables from the define.

2

I highly recommend using Puppet syntax highlighting to avoid this sort of thing.

http://www.vim.org/scripts/script.php?script_id=2094

2
  • 1
    And have a look at Geppetto, a nice toolset to help develop Puppet modules and manifests. It would signal an error like this. May 29, 2011 at 22:43
  • 2
    It's Eclipse-based. I wouldn't call that "nice" :p Mar 10, 2014 at 10:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .