我不确定这是否只是特定于我的发行版软件包,还是 vbox 限制。因此,任何帮助将不胜感激。
好的,所以我有一个虚拟机网络,其中一个虚拟机充当“内部”网络中其他虚拟机的 NAT。其中一台虚拟机正在运行 DHCP 和 TFTP 服务器,我只需要从该服务器启动其他虚拟机,但是从网络启动时我启动的所有虚拟机是“致命:无法从启动介质读取!系统”停止”。
这有点令人沮丧,因为 vbox 非常易于使用和试验,但我无法解决这个错误。帮助 ?
尽管我知道我昨天面临的问题的直接解决方案(感谢 IRC #puppet 上的人们),但我仍然不明白它是如何解决问题的,或者更确切地说,在这个特定的类和定义之间的根本区别是什么设想:
原来的定义,这是不正确的:
define srv($name,$enable="true",$ensure="running",$provider="runit",$hasstatus="true",$hasrestart="true"){
exec {"sleep 5": path=>"/usr/bin:/usr/sbin:/bin:/sbin", before=>Service["$name"],}
service{"$name":
enable=>$enable,
ensure=>$ensure,
provider=>$provider,
hasstatus=>$hasstatus,
hasrestart=>$hasrestart,
}
}
Run Code Online (Sandbox Code Playgroud)
错误:无法从远程服务器检索目录:服务器上的错误 400:重复定义:Exec[sleep 5] 已在文件 /etc/puppet/modules/common/manifests/defines/srv.pp 第 4 行中定义;无法在节点 testing.abc.def.com 上的 /etc/puppet/modules/common/manifests/defines/srv.pp:4 重新定义
正确定义:
define srv($enable="true",$ensure="running",$provider="runit",$hasstatus="true",$hasrestart="true"){
exec {"sleep 5 for $name": command=>"sleep 5", path=>"/usr/bin:/usr/sbin:/bin:/sbin", before=>Service["$name"],}
service{"$name":
enable=>$enable,
ensure=>$ensure,
provider=>$provider,
hasstatus=>$hasstatus,
hasrestart=>$hasrestart,
}
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么在第一种情况下会出现错误?我如何复制定义,或者换句话说,如果有一个使用此定义的模块,那么第一个定义将起作用?也许是文档中的 puppet 术语让我感到困惑,但是编写了大量(工作)模块并且不理解这对我来说听起来很危险,希望我能得到一些明确的答案。