“如何推迟”;文件";puppet 3.7中的函数执行

“如何推迟”;文件";puppet 3.7中的函数执行,puppet,Puppet,这似乎是一个微不足道的问题,但事实并非如此。我使用puppet 3.7将项目中的工件部署和配置到各种环境中。Puppet 5.5的升级已经在计划中,但到目前为止还没有ETA 我试图自动化的事情之一是对底层数据库的增量更改。它不是SQL,所以标准工具是毫无疑问的。这些更改将以包含在特殊模块中的shell脚本的形式出现,该模块也将作为工件进行部署。对于每个版本,我们希望有一个文件,其内容将列出在此版本范围内执行的shell脚本。例如,如果在版本1.2中,我们实现了JIRA-123、JIRA-124和

这似乎是一个微不足道的问题,但事实并非如此。我使用puppet 3.7将项目中的工件部署和配置到各种环境中。Puppet 5.5的升级已经在计划中,但到目前为止还没有ETA

我试图自动化的事情之一是对底层数据库的增量更改。它不是SQL,所以标准工具是毫无疑问的。这些更改将以包含在特殊模块中的shell脚本的形式出现,该模块也将作为工件进行部署。对于每个版本,我们希望有一个文件,其内容将列出在此版本范围内执行的shell脚本。例如,如果在版本1.2中,我们实现了JIRA-123、JIRA-124和JIRA-125,我希望执行脚本JIRA-123.sh、JIRA-124.sh和JIRA-125.sh,但没有其他脚本仍然在以前版本的模块中

因此,我的发行版“控制”文件将被称为类似jiras.1.2.csv的文件,其中一行如下所示:

JIRA-123,JIRA-124,JIRA-125
这里puppet的任务似乎很简单——读取此文件的内容,拆分为“,”字符,然后继续为每个jiras构建exec任务。问题是木偶函数应该能帮助我做到这一点

file("/somewhere/in/the/filesystem/jiras.1.2.csv")
在构建puppet目录时执行,而不是在应用目录时执行。然而,由于该文件是该版本有效负载的一部分,所以它还不存在。它将以tar.gz版本包的形式从nexus下载,并在稍后提取。我有一个可以保持的锚,我用它来同步exec任务,但是我可以将文件内容的读取附加到该锚吗

也许我处理问题的方法不对?我在想,构成增量db升级的具有实施前和实施后任务的模块可以结构化,以便每个版本都有一个子目录与版本名匹配,但我需要列出该子目录的内容来构建我的exec任务,而且,至少就我有限的木偶知识而言,这也不能推迟到某个特定的锚

---在其中一条评论后编辑---


问题是升级到puppet 5.x超出了我的控制范围——这是另一个团队在一个庞大的组织中处理这件事,所以我对此没有影响力,在可预见的未来,我将继续使用3.7

至于我要做的,对于我们开发和发布的一系列不同的软件包,我想创建三个新的包:预实现、后实现和检查。第一个将保存在实际包中发布新代码之前执行的任何任务。这通常是备份数据库之类的事情。后期实现将处理在部署新代码后需要解决的问题—例如,操作将转到并修改旧数据,因为例如,我们更改了表中的列类型。检查只是为了确保发布100%正确执行而执行的验证——例如,对列中的数据类型运行select查询并断言,我们刚刚更改了它的类型。今天,所有这些都是令人望而生畏的手动操作,由那些不走运的人来执行发布。然而,最重要的是,由于是手动的,根据定义,这些是容易出错的


所采取的方法是,对于作为发布一部分的每个JIRA票据,负责的开发人员必须决定发布其工作所需的步骤(如果有),并编写脚本。Puppet应该协调所有这些的执行。

这很可能是解决问题的错误方法,但不清楚您在这里试图实现什么。这听起来也像是升级后使用Puppet任务/计划更容易解决的问题。一般来说,Puppet<4.10是人们多年前使用的东西,因此您的结果可能会有所不同。问题是升级到Puppet 5.x超出了我的控制范围-这是另一个团队在一个庞大的组织中处理这方面的事情,因此我对此没有影响,在可预见的未来,我将坚持使用3.7。您能分享一点清单吗你现在正在做什么?我在Rube Goldberg机器中贡献了相当大的一部分,用于处理木偶的遗留安装。还有,我很好奇。。。您建议这不是典型的rdbms,但我假设这些基本上是您正在运行的迁移。如何从错误的迁移中恢复?