我们使用Packer为Azure比例集构造一个自定义的centos7图像。其中一部分包括我们创建的自定义rpm,它从源构建git (不能使用社区repos,因此我们自己创建)并将其安装到/usr/local/bin目录中。在通常的实践中,这个程序包工作得很完美。所有的东西都被适当地安装到正确的地方,我们可以使用我们的新版本的git。
当我们通过Packer运行时,我们通过ansible安装它,最后Packer执行解除操作步骤,捕获图像并将其放到一个天蓝色共享映像库中,然后我们将其用于我们的天蓝色比例尺集。
Scale set使用图像创建了几个实例,我们已经启动并运行。问题是,突然间,/usr/local/目录似乎被重置为默认目录。在/usr/local/bin中已经没有任何东西了,而且,我们作为依赖项安装的一些(不是所有的)包(比如gcc )也消失了。我们的git rpm仍然被列为已安装,但gcc没有。
/usr/bin/似乎很好(除了失踪的gcc,尽管我们现在不需要它,它似乎仍然是有关的),所以我们很可能只是安装在那里,但我仍然想知道是否发生了什么疯狂的事情发生了,我是否应该注意它在未来,因为/usr/本地/似乎是一个合理的地点安装它。
TL;DR:
发布于 2021-10-15 16:49:12
弄明白了。
事实证明(至少1.7.2版),Packer不一定与共享Image版本相比,使用天蓝色的arm进行幂等操作,甚至使用-force标志。
在使git包完全工作并正确安装之前,我们已经创建了SIG映像版本,因此它是在没有/usr/local/bin/修改的基础映像上创建的。
当我们使用force标志运行Packer构建时,它删除并重新创建基本映像,但是它运行一个PUT调用,其中包含SIG映像版本的配置信息,也就是说,如果它遵循约定,它将“创建或更新”(除非您设置了一些packer日志记录vars并将冗长的日志输出到一个文件或其他文件中)。
因此,虽然基本映像被更新为具有git正确设置的映像,但SIG版本认为它使用的是与以前相同的基本映像(名称相同,没有唯一标识符),因此就其而言,配置没有更改,不需要发生任何事情。在我们删除旧版本或制作新版本之后,它根据我们创建的基本映像正确地构建了一个VM,并且所有的东西都应该在原来的位置。
我绝对认为,a-force应该是一个从开始到结束的幂等运算,我不确定这在将来的版本中是否是固定的(在写这篇文章的时候,它们在1.7.6上),但是也许我会在我检查过之后更新它。
https://stackoverflow.com/questions/69561820
复制相似问题