你如何处理以下用例的问题:
安装了一个应用程序X版本1及其版本1的配置变量。随后发布了带有不同配置变量集的X版本2(即,应用程序可能已在/ etc下的文件中添加或删除了一个变量) 。我想升级到X版本2并保留X版本1的旧配置。我还希望选择在以后回滚到X版本1,将其恢复到升级到X版本2之前的配置状态。
您如何使用Ansible或Puppet来确保这一点?
答案 0 :(得分:3)
您的问题可能会被标记为过于宽泛,因为有太多可能的答案/方法,并且它将在很大程度上取决于其他一些问题,例如:
您使用的是软件包管理器(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
当然,您可能需要对其进行扩展以确保删除其他版本的软件包,因此只存在最新版本。
如果您的环境更复杂,例如需要维护许多不同的配置文件和/或模板不是可行的解决方案,那么您可能希望在之前实现某种配置文件的备份/存档更新它们。这也可以通过多种方式中的任何一种来完成,例如:
使用Ansible fetch模块从目标服务器获取配置文件
只需调用tar,cp或类似内容来备份目标服务器上的文件
您还可以设计一种完全独特的方法来维护多个版本的应用程序。例如,我们使用符号链接来管理多个版本的第三方应用程序以及我们自己的应用程序。我们在/deploy/software/httpd-2.2.21
,/deploy/software/httpd-2.4.0
等位置构建和安装不同版本的Apache,并且有一个名为/deploy/software/httpd
的符号链接,指向我们当前要运行的版本。所有特定于版本的配置文件都保留在特定于版本的目录中,因此切换版本就像关闭Apache,更改符号链接以及重新启动Apache一样简单。