我想通过版本控制来设置我们的环境。我们的shell脚本散布在不同的服务器上。我不知道从哪里开始组织它对其进行版本控制。但是,我们也使用puppet进行配置管理,这也应该有版本控制。我有以下2个问题,我不是很确定,如果他们可能至少:脚本和傀儡的版本控制
- 有没有办法来对剧本留下他们的位置不管他们现在是正确的,因为大多数脚本是服务器版本控制具体。
- 是否有任何常见的解决方案来使用puppet模块和shell脚本的版本控制,或者将脚本放在puppet中,并且仅将版本控制puppet。
在此先感谢。
我想通过版本控制来设置我们的环境。我们的shell脚本散布在不同的服务器上。我不知道从哪里开始组织它对其进行版本控制。但是,我们也使用puppet进行配置管理,这也应该有版本控制。我有以下2个问题,我不是很确定,如果他们可能至少:脚本和傀儡的版本控制
在此先感谢。
TL;博士:
- 有没有办法对他们留在为所欲为现在是正确的,因为大多数脚本是服务器的特定位置的脚本版本控制?
- 是否有任何常见的解决方案来使用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',
}
}
这是更幂等,它是平台独立的。
这个重构从这里继续。