如何恢复与puppetconfiguration

我写了一个模块,它使用puppet在/etc/rsyslog.d/60-custconfig.conf中为rsyslog写入configuration

当我添加模块到节点,它的工作原理,但如果我删除评论或删除节点中的模块调用,是否应该删除该文件? 如果没有,有没有办法回滚configuration或安装

您不会恢复Puppet通过删除资源执行的操作。 通过从你的清单中删除资源,你只能告诉Puppet不要pipe理它(已经)。

此外,木偶根本不记得/了解以前的状态,所以它不能回到那个。 它只是试图将系统更改为您在清单中定义的状态。

我在这里看到的一种方式是再次包含file资源,但现在ensure => absent

 file { '/etc/rsyslog.d/60-custconfig.conf': ensure => absent, } 

你也可以通过这种方式改变Puppet模块的devise:

  • pipe理rsyslog模块中的所有rsyslogconfiguration文件。
  • 从需要更改rsyslog的其他模块创build虚拟自定义types。
  • 在rsyslog模块中,收集虚拟configuration节并指示它删除该自定义types的所有未定义资源。

甚至更简单的方法是使用puppetlabs-concat模块,在模块中定义虚拟concat :: fragments并将它们收集到rsyslog模块中以构build“60 -custconfig.conf”configuration文件。 如果虚拟资源从其他模块中被删除,那么收集到的片段将导致一个没有片段的文件不受pipe理。 实际上,这些将从文件中删除。

你必须明确地编写代码来“撤消”你想要恢复的任何特定的操作。

例如,如果你有一个安装了几个包的my_apache模块,configuration好几个文件,并确保一定的状态,你将不得不在这个模块中编写另外一个类,让我们称之为my_apache::uninstall ,你的其他模块做到了。 undo类不一定是在原始模块内部,也可以是原始模块的一部分。 它可以是一个完全独立的课程。 改变应用于主机的一种好方法是使用ENC 。

在Puppet中恢复或删除configuration更改没有简单的答案,但一个简单的方法是使用Puppetpipe理的configuration目录。

 class rsyslog::config { file { '/etc/rsyslog.d': ensure => directory, force => true, purge => true, recurse => true, } file { '/etc/rsyslog.conf': ensure => present, content => template('rsyslog/rsyslog.conf.erb'), } file { '/etc/rsyslog.d/50-default.conf': ensure => present, content => template('rsyslog/50-default.conf.erb'), require => File['/etc/rsyslog.d'], } } 

上面所做的是告诉Puppet完全拥有/etc/rsyslog.d/中的所有内容,并删除Puppet在其中不pipe理的任何内容。 如果服务器以前正在运行haproxy,并且在系统日志中有一个configuration文件,那么当您删除happroxy模块时,对/etc/rsyslog.d/40-haproxy.conf的引用将会消失,Puppet会将其从configuration目录中删除。 它也会生成一个通知事件,你可以使用它来让Puppet重启系统日志,尽pipe你需要一个通知或者连接到服务来这样做。

我想这将有可能使用反模块的模式。 例如…

 zookeeper_present 

这个模块将完全为zookeeperconfiguration主机

  zookeeper_not_present 

这个模块会颠倒之前模块做的任何事情。

 lvs_present 

这个模块将完全configuration主机为lvs。

 lvs_not_present 

这个模块会颠倒之前模块做的任何事情。

…等等

要小心,不要结束竞争的模块,其中一个present_module试图设置的东西和一个not_present_module试图撤消该设置。 这可能发生在有两个模块需要相同的事情的地方。

解决这个问题的一个方法可能是将这个共同的设置分解到自己的模块,并使其他两个模块依赖于这个模块。 但是,当没有人再需要通用模块时,您将不得不在site.pp文件中手动更换该模块的not_present_version。

详细说明已经发布的答案:Puppetpipe理资源。 pipe理意味着它知道资源的状态,并确保资源处于所需的状态。 你告诉Puppet要pipe理什么以及如何pipe理它。 一旦Puppet不再了解资源,显然它不能再pipe理它。 这就是木偶工作的方式。

想象一下,如果Puppet简单地删除了它不知道的资源,那么它会在系统上造成巨大的破坏。 这本身已经听起来有些矛盾。 你怎么删除你不知道的东西? 但即使Puppet有办法做到这一点,也可能会破坏你的系统。