脚本和木偶的版本控制



我正在尝试使用版本控制来设置我们的环境。我们的 shell 脚本分散在不同的服务器上。我不知道我必须从哪里开始组织它才能对其进行版本控制。但是,我们也使用 puppet 进行配置管理,它也应该具有版本控制。我有以下 2 个问题,我不确定它们是否至少可行:

  1. 有没有办法对脚本进行版本控制,将它们留在现在的位置,因为大多数脚本都是特定于服务器的。
  2. 是否有任何常见的解决方案可以对傀儡模块和 shell 脚本使用版本控制,或者将脚本放在傀儡中并且仅将版本控制傀儡中。

提前谢谢。

tl;dr:

  1. 有没有办法对脚本进行版本控制,将它们留在现在的位置,因为大多数脚本都是特定于服务器的?
  2. 是否有任何常见的解决方案可以对傀儡模块和 shell 脚本使用版本控制,或者将脚本放在傀儡中并且仅将版本控制傀儡中。

这是可能的,但如果你编写你的Puppet代码来处理你的要求,这是不必要的。

通常,当您开始使用像Puppet这样的配置管理工具时,您这样做是为了摆脱管理脚本。Puppet 是一种无需编写任何脚本即可运行命令的方式,并将运行的实际步骤抽象到 Puppet 并让它处理它。

使用 Puppet

运行现有脚本通常是一种临时情况,您希望最终重构为使用 Puppet execs,然后是更幂等的 Puppet 模块和清单,直到最终本机 Puppet 代码满足所有要求,因此更改完全由 puppet 管理。

有关为什么要这样做的详细信息,请参阅此问题:https://serverfault.com/questions/504070/why-use-chef-puppet-over-shell-scripts

例如,假设您在Web服务器上使用脚本来安装软件包:

Note: Steps simplified for examples, code might not actually work

脚本示例:

#/bin/bash
if $HOSTNAME='webserver.example'
  yum install nginx
fi

这位于/var/tmp/install_nginx.sh

首先,您可以使用Puppet运行它:

exec {'/var/tmp/install_nginx.sh':}

但是,我们如何首先获得该脚本?你可以把它放在版本控制中,但是你如何设置它呢?

即使你让它工作,这也有点繁琐:如果网络服务器的名称发生变化怎么办,如果你想在多个服务器上使用它怎么办?

然后你可以用Puppet本身创建脚本:

$webserver_host = 'webserver.example'
$nginx_install_script = "if $HOSTNAME=${webserver.example}
     yum install nginx
   fi"
exec {'Install Nginx':
   command => $nginx_install_script
}

因此,如果您需要更改Web服务器名称,则可以更改变量。

但这仍然不是幂等的。Puppet具有本机类型,可以减少很多工作(在此处记录,或者您可以编写自己的工作)

因此,您可以更改该代码以使其更好:

$webserver_host = 'webserver.example'
if $::fqdn == webserver_host {
  package {'nginx':
     ensure => 'present',
  }
}

这是幂等的,它是独立于平台的。

这种重构从这里继续。

最新更新