脚本和木偶的版本控制

时间:2016-01-20 07:00:15

标签: scripting controls version puppet

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

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

1 个答案:

答案 0 :(得分:1)

TL; DR:

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

这是可能的,但如果您编写Puppet代码来处理您的要求,则无需这样做。

通常,当您开始使用像Puppet这样的配置管理工具时,您正在执行此操作以远离管理脚本。 Puppet是一种在不编写任何脚本的情况下运行命令的方法,并且抽象实际步骤以运行到Puppet并让它处理它。

使用Puppet运行现有脚本通常是一种临时情况,您希望最终重构为使用Puppet执行程序,然后使用更幂等的Puppet模块和清单,直到最终所有需求都由本机Puppet代码满足,因此更改仅限于管理傀儡。

有关为何要执行此操作的详细信息,请参阅此问题:https://serverfault.com/questions/504070/why-use-chef-puppet-over-shell-scripts

例如,假设您开始使用脚本安装软件包,如果您在网络服务器上:

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
}

那么如果您需要更改网络服务器名称,则可以更改变量。

但这仍然不是幂等的。 Puppet有本机类型,可以完成很多工作(Documented here或者你可以编写自己的工作)

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

$webserver_host = 'webserver.example'

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

这是更加幂等的,它与平台无关。

这种重构从这里继续。