Как сделать так, чтобы Puppet развернул ssh-ключи для виртуальных пользователей?

8

Я пытаюсь заставить puppet назначить авторизованные ssh-ключи для виртуальных пользователей, но получаю следующую ошибку:

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

Я считаю, что моя конфигурация верна (перечислены ниже), но есть ли ошибка синтаксиса или проблема с областью действия, которую я пропускаю? Я просто хотел бы назначить пользователей на узлы, чтобы у этих пользователей автоматически были установлены ssh-ключи. Может быть, есть лучший способ сделать это, и я просто обдумываю это?

# /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" }
Pheezy
источник

Ответы:

15

Вам не хватает закрывающей скобки в конце virtual.pp.

romble
источник
7

Вот кукольный модуль, который я написал год назад для управления пользователями для предыдущего работодателя.

jtimberman
источник
Это выглядит так сложно ...
SamK
3
Это было самое простое, что я придумал, это сработало. Везде, где я просил помощи или других подходов, мне говорили «использовать LDAP», что не отвечало только 10 пользователям, поскольку мы нигде не использовали LDAP и должны были поддерживать 3 физических сайта.
jtimberman
3

Да, есть лучший способ, это именно то, для чего нужны определения. Вы должны создать определение под названием «ssh_user», создать виртуальных пользователей этого типа, а затем реализовать их. Код Джоша использует определение, о котором я говорю, но вы также добавили бы ssh_authorized_key в определение, параметризованное переменными из определения.


источник
2

Я настоятельно рекомендую использовать подсветку синтаксиса Puppet, чтобы избежать подобных вещей.

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

Cawflands
источник
1
Взгляните на Geppetto , хороший набор инструментов для разработки модулей и манифестов Puppet. Это будет сигнализировать об ошибке, как это.
Мартейн Химельс
2
Это основано на Eclipse. Я бы не назвал это "хорошим": p
ThiefMaster