使用ansible或puppet回滚应用程序

使用ansible或puppet回滚应用程序,puppet,ansible,Puppet,Ansible,您将如何让ansible或puppet处理以下用例: 安装了一个应用程序X版本1,其配置变量为版本1。随后,X版本2发布时带有一个不同的配置变量集(即,应用程序可能在/etc下的文件中添加或删除了一个变量)。我想升级到X版本2并保留X版本1的旧配置。我还希望该选项在以后回滚到X版本1,将其恢复到升级到X版本2之前的配置状态 您将如何使用Ansible或Puppet来确保这一点?您的问题可能被标记为过于宽泛,因为有太多潜在的答案/方法,这将在很大程度上取决于许多其他问题,例如: 您是使用软件包管

您将如何让ansible或puppet处理以下用例:

安装了一个应用程序X版本1,其配置变量为版本1。随后,X版本2发布时带有一个不同的配置变量集(即,应用程序可能在/etc下的文件中添加或删除了一个变量)。我想升级到X版本2并保留X版本1的旧配置。我还希望该选项在以后回滚到X版本1,将其恢复到升级到X版本2之前的配置状态


您将如何使用Ansible或Puppet来确保这一点?

您的问题可能被标记为过于宽泛,因为有太多潜在的答案/方法,这将在很大程度上取决于许多其他问题,例如:

  • 您是使用软件包管理器(rpm、apt等),还是使用gnu automake或其他工具手动安装应用程序

  • 具体涉及哪些类型的配置文件、数量、位置等

在最基本的层面上,如果您依赖于维护良好的包,那么简单地使用适当的包管理器就足够了。如果你正在做任何超出此范围的事情,那么你将不得不根据自己的喜好定制事情。对于如何做这类事情,没有单一的错误或正确答案,因为有很多不同的方法基于您的个人需求/需求

作为一个示例,假设您有一个依赖于配置文件
/etc/service.conf
的应用程序,该文件只有一个包含版本号的条目:

version: 1.2.3
您可以简单地模板化这个文件,并在Ansible或Puppet中指定版本号。例如,在Ansible中,您的模板如下所示:

version: {{ version }}
- hosts: localhost
  vars:
    version: 1.2.3
  tasks:
    - yum: name=package-{{ version }}
           state=present

    - template: src=service.template
                dest=/etc/service.conf
然后是一本类似这样的剧本:

version: {{ version }}
- hosts: localhost
  vars:
    version: 1.2.3
  tasks:
    - yum: name=package-{{ version }}
           state=present

    - template: src=service.template
                dest=/etc/service.conf
当然,您可能希望对此进行扩展,以确保删除包的其他版本,从而只存在最新版本

如果您的环境更复杂,例如有许多不同的配置文件需要维护和/或模板不是可行的解决方案,那么您可能希望在更新配置文件之前对其实施某种备份/归档。这也可以通过多种方式中的任何一种来实现,例如:

  • 使用Ansible模块从目标服务器获取配置文件

  • 只需调用tar、cp或类似的方法来备份目标服务器上的文件


您还可以设计一种完全独特的方法来维护应用程序的多个版本。例如,我们使用符号链接来管理多个版本的第三方应用程序以及我们自己的应用程序。我们在
/deploy/software/httpd-2.2.21
/deploy/software/httpd-2.4.0
等位置构建和安装不同版本的Apache,并有一个名为
/deploy/software/httpd
的符号链接,指向我们当前要运行的版本。所有特定于版本的配置文件等都保留在特定于版本的目录中,因此切换版本非常简单,只需关闭Apache、更改符号链接并重新启动Apache。

如果可能,我会使用Phoenix服务器方法。烧掉第一个,然后根据您想要的状态创建一个新的。