我在下面有一个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}"
}
Puppet 3.3.1和Ubuntu 12.04.3 LTS。
答案 0 :(得分:2)
您正在寻找的是元参数(意味着您可以为任何类指定它)require
。
我假设您的木偶脚本包含在可以访问$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}"
}