0

我在下面有 puppet 脚本来创建一个用户和一个授权的 SSH 密钥,该密钥有 50% 的时间会失败。似乎 /home/$username 是在后台创建的,并且在尝试创建 .ssh 和授权密钥时并不总是在那里。Puppet 失败,因为 /home/$username 不存在。但是当我稍后再看时,它实际上已经被创建了。

在主目录实际完全创建之前,如何让 puppet 不继续?

  user { $username:
    name => $username,
    managehome => true,
    shell => "/bin/bash",
    groups => [ 'dip', 'admin' ];
  }

  file { "/home/${username}/.ssh":
    ensure => 'directory';
  }

  file { "/home/${username}/.ssh/authorized_keys":
    owner => "${username}",
    group => "${username}",
    mode => '0664',
    content => "${ssh_public_key}"
  }

木偶 3.3.1 和 Ubuntu 12.04.3 LTS。

4

1 回答 1

2

您正在寻找的是元参数(意味着您可以为任何类指定它)require

我假设你的 puppet 脚本被包装在一个可以访问的范围内$username,因此这样的事情会起作用:

user { $username:
    name => $username,
    managehome => true,
    shell => "/bin/bash",
    groups => [ 'dip', 'admin' ]
}

file { "/home/${username}/.ssh":
    ensure => 'directory',
    require => User["$username"]
}

file { "/home/${username}/.ssh/authorized_keys":
    require => File["/home/${username}/.ssh"],
    owner => "${username}",
    group => "${username}",
    mode => '0664',
    content => "${ssh_public_key}"
}
于 2013-10-08T13:02:31.610 回答