2016-01-20 104 views
0

我想通过版本控制来设置我们的环境。我们的shell脚本散布在不同的服务器上。我不知道从哪里开始组织它对其进行版本控制。但是,我们也使用puppet进行配置管理,这也应该有版本控制。我有以下2个问题,我不是很确定,如果他们可能至少:脚本和傀儡的版本控制

  1. 有没有办法来对剧本留下他们的位置不管他们现在是正确的,因为大多数脚本是服务器版本控制具体。
  2. 是否有任何常见的解决方案来使用puppet模块和shell脚本的版本控制,或者将脚本放在puppet中,并且仅将版本控制puppet。

在此先感谢。

回答

1

TL;博士:

  1. 有没有办法对他们留在为所欲为现在是正确的,因为大多数脚本是服务器的特定位置的脚本版本控制?
  2. 是否有任何常见的解决方案来使用puppet模块和shell脚本的版本控制,或者将脚本放在puppet中,并且仅将版本控制puppet。

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

通常,当你开始使用配置管理工具,如Puppet,,你正在做的是摆脱管理脚本。 Puppet是一种不用编写任何脚本就可以运行命令的方法,并且可以抽象出运行到Puppet并让它处理它的实际步骤。

使用Puppet来运行现有脚本通常是一种临时情形,您希望最终重构为使用Puppet exec,然后使用更多幂等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

首先,你可以用木偶运行:

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

然而,我们如何让这个脚本有摆在首位?你可以把它放在版本控制的地方,但是你怎么设置它呢?

即使你得到这个工作,这有点烦琐:如果Web服务器的名称发生变化,如果你想在多台服务器上使用它,该怎么办?

然后,你可以用木偶本身创建脚本:

$webserver_host = 'webserver.example' 

$nginx_install_script = "if $HOSTNAME=${webserver.example} 
    yum install nginx 
    fi" 

exec {'Install Nginx': 
    command => $nginx_install_script 
} 

那么接下来,如果你需要改变Web服务器的名称,你可以只改变变量。

但这仍然不是幂等的。木偶有采取了很多的工作,出了事情原生类型(Documented here或者你可以写你自己的)

所以,你可以更改代码,使其好多了:

$webserver_host = 'webserver.example' 

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

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

这个重构从这里继续。