从哈希数组生成 Puppet 资源

从哈希数组生成 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。对于远程配置,我将其保存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

(如果这很重要的话,我在 Ubuntu 上使用来自 apt.puppetlabs.com 的 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 => { } }

相关内容