我必须创建一个脚本来管理托管公司的维护页面服务器。
我需要做一个类似于此的CLI界面(示例场景):
(这里假设mcli是脚本的名称,1.1.1.1原始服务器地址(托管网站,www.exemple.com)
这里我只使用原始IP地址在维护服务器上创建环回接口,并在启用站点的地方创建特定于nginx站点的配置文件
$ mcli register www.exemple.com 1.1.1.1
[DEBUG] Adding IP 1.1.1.1 to new loopback interface lo:001001001001
[WARNING] No root directory specified, setting default maintenance page.
[DEBUG] Registering www.exemple.com maintenance page and reloading Nginx: OK
然后,当我想启用维护页面并完全关闭网站时:
$ mcli maintenance www.exemple.com
[DEBUG] Connecting to router with SSH: OK
[DEBUG] Setting new route to 1.1.1.1 to maintenance server: OK
[DEBUG] Writing configuration: Ok
然后删除维护页面:
$ mcli nomaintenance www.exemple.com
[DEBUG] Connecting to router with SSH: OK
[DEBUG] Removing route to 1.1.1.1: Ok
[DEBUG] Writing configuration: Ok
我需要一个功能来查看网站的实际状态
$ mcli list
+------------------+-----------------+------------------+
| Site Name | Server I.P | Maintenance mode |
+------------------+-----------------+------------------+
| www.example.com | 1.1.1.1 | Enabled |
| www.example.org | 1.1.1.2 | Disabled |
+------------------+-----------------+------------------+
$ mcli show www.example.org
Site Name: www.example.org
Server I.P: 1.1.1.1
Maintenance Mode: Enabled
Root Directory : /var/www/maintenance/default/
但我从来没有用Ruby编写这种脚本。你对这类东西推荐什么宝石?对于命令行解析?柱/彩色输出? SSH连接(需要连接到cisco路由器)
您是否建议我使用本地数据库(sqlite)存储元数据(阶段更改,实际状态),还是建议我通过分析nginx / interfaces配置文件并使用syslog监视更改来动态计算用这个脚本?
此脚本将首次用于大规模数据中心物理迁移,接下来将用于计划停机时间的标准用途。
谢谢
答案 0 :(得分:1)
首先,我建议您获取Build awesome command-line applications in Ruby的副本。
那就是说,你可能想检查一下
GLI命令行解析,如git
OptionParser命令行解析
就个人而言,我会选择SQLite方法来存储数据,但我有偏见(具有强大的SQL背景)。
答案 1 :(得分:0)
Thor是处理CLI选项的好宝石。它允许您的脚本中的这种类型的组织:
class Maintenance < Thor
desc "maintenance", "put up maintenance page"
method_option :switch, :aliases => '-s', :type => 'string'
#The method name is the name of the task that would be run => mcli maintenance
def maintenance
#do stuff
end
no_tasks do
#methods that you don't want cli tasks for go here
end
end
Maintenance.start
虽然我对列/彩色输出没有任何好的建议。
我绝对建议使用某种数据库来存储状态。也许不是sqlite,我可能会选择一个redis数据库来存储键/值对以及你正在寻找的信息。
答案 2 :(得分:0)
我们有类似的任务。我使用下一个架构
update_clusters() {
${CONF_GEN} --outfile=/tmp/nginx_clusters.conf
RETVAL=$?
if [[ "$RETVAL" != "0" ]]; then
return 5
fi
if ! diff ${CLUSTER_CONF_FILE} /tmp/nginx_clusters.conf > /dev/null; then
echo "Cluster configuration changed. Reload service"
mv -f /tmp/nginx_clusters.conf ${CLUSTER_CONF_FILE}
reload
fi
}