私はPuppetを初めて使用し、Puppetを使い始めるために、システムユーザーを管理する方法を学びたいと思っています。
共通のプロパティを共有するユーザーが何人かいるので、除外する必要があると思いました。
いくつかの苦労の後、これが私が持ってきたものです:
define staff::ssh_key($user) {
ssh_authorized_key { $name[name]:
ensure => present,
key => $name[key],
type => "ssh-rsa",
user => $user,
require => File["/home/${user}/.ssh"],
}
}
define staff($fullname, $ssh_keys, $Shell = "/bin/bash") {
user { $name:
ensure => present,
comment => "${fullname},,,",
home => "/home/${name}",
managehome => true,
groups => ["users", "adm", "Sudo"],
Shell => $Shell,
}
file { "/home/${name}/.ssh":
ensure => directory,
mode => 0700,
owner => $name,
require => User[$name],
}
staff::ssh_key { $ssh_keys:
user => $name,
}
}
次に、次のようなユーザーを宣言します。
staff { "drdaeman":
fullname => "Aleksey Zhukov",
Shell => "/bin/zsh",
ssh_keys => [
{
name => "desktop",
key => "AAAA....6s=",
}
{
name => "notebook",
key => "AAAA....Q==",
}
],
}
とりあえず、これらの部分は両方ともstaff.pp
という1つのファイルに保存されています。リモート構成の場合、次の内容でsite.pp
を配置しました。
node "foobar.example.org" {
import "staff.pp"
}
ローカルではすべて正常に動作しているように見えますが、puppet apply staff.pp
を呼び出すと、リモートで使用すると失敗します。 puppet agent --test
を実行すると、エラーが発生します。
err: Could not retrieve catalog from remote server: Could not intern from pson: Could not convert from pson: Could not find relationship source "Staff::Ssh_key[namenotebookkeyAAAA...Q==]"
err: Could not retrieve catalog; skipping run
(これが重要な場合は、apt.puppetlabs.comのUbuntuでPuppet 2.7.14を使用しています。)
したがって、Puppetは、少なくともデータがネットワークを介して渡されるときは、リソース名としてハッシュを好まないようです。必要なすべてのssh_authorized_key
リソースを手動でコピーして貼り付けるのではなく、これを回避する方法はありますか? (それは私の好みには冗長すぎるでしょう)
この正確なケースでは、file "/home/${name}/.ssh/authorized_keys": ... }
の代わりに単純なssh_authorized_key
を使用するか、 concat::fragment
を使用 を使用して回避できますが、他の同様のファイルでは機能しないことに注意してください。一部のリソースに複数の依存リソースがあり、それらを1つのファイルに簡単に縮小できない場合。むしろ、私はこのおよび同様の状況(もしあれば)を解決するための比較的一般的な方法を探しています。
次のように宣言する代わりに、create_resourceを使用する必要があります。
staff::ssh_key { $ssh_keys:
user => $name,
}
ユーザーの利便性を維持するには=> $ name:
Staff::Ssh_key {
user => $name,
}
create_resources('staff::ssh_key', $ssh_keys)
また、ssh_keysをstaffの配列ではなくハッシュに変更します{... ssh_keys => {}}