Loading...

批判翼龙的升级是多么不负责

今天呢,想在开发机上面尝试一下使用新的面板,也就是翼龙的0.7.7版.按照官方步骤升级之后.第一眼,我就看到了服务器状态居然是Error,点进去,右下角报错

Invalid namespace

(哎哟我去,这错误怎么排查啊.)

首先想到的是:我要不要重新构建一下容器呢.当时从0.6.5升级到0.7.4的时候,就需要手工重新构建所有的容器,这样子后端才能识别出来

好吧,那我就去重构一下吧,结果到我按下”Rebuild Server Container”的时候,屏幕上返回了HTTP404错误.这个错误在之前我还怀疑是Let’s Encrypt证书信任链的问题,不过昨天已经对两台E5做了升级,这回应该就不是SSL证书的问题了.

接下来想到的是:看日志,定位详细的病根.从Laravel的日志里可以发现,错误来自对后端的一个Post请求

[2018-06-11 12:31:46] production.WARNING: GuzzleHttp\Exception\ClientException: Client error: `POST https://{domain}/v1/server/rebuild` resulted in a `404 Not Found` response:
{
“error”: “Unknown server defined in X-Access-Server header.”
}
in /data/wwwroot/{domain}/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113

(很明显是想告诉我找不到这个服务器嘛)

我想试着用curl手工请求这个URL,但是得到了另外一种错误

{
    "error": "Missing required X-Access-Token header."
}

不就是缺失了Token么,那我用curl -H给你补上就是.

然而事情也还是没有想象中那么简单,curl+token进行访问,还是遇到了那个缺失X-Access-Server的错误.我想呢,这个X-Access-Server也是一种Header吧,要想补全他肯定也是 用’-H’ , 但是我要去哪里找这个数据呢?后来翻查翼龙后端Wings的源码,在src/middleware/authorizable.js里面发现了与X-Access-Token和X-Access-Server有关的内容,部分具体内容截图如下:

诶,我发现了UUID,换句话说,这个X-Access-Server不就是容器的UUID么.

于是最终,请求体的组成就变成了这样子
[code lang=”Bash”] curl -H ‘X-Access-Token:{Your daemon master key}’ \
-H ‘X-Access-Server:{Container UUID}’ \
-X POST https://{Daemon Address:Port}/v1/server/rebuild
[/code]

举例

这下子好了,Token也有,Server也有,可还是报告我找不到这个服务器.晕………

抱着继续试一试的心态,我去新建了一个服务器,诶,成功了诶.然后我用curl执行列出服务器的命令,我勒个去.只有一台服务器?  对,你没听错,就是只有一台服务器,之前无法操作的那一台就不在列表里了.那还能怎么办,只能用Force Delete把那个服务器删掉呗.接着我又反复操作了几次新建服务器和删除服务器的按钮,发现一切正常.说明之前升级留下来那个服务器被翼龙的更新”无情”地抛弃了.

唉,翼龙的更新就是这么不负责任,总是丢这个丢那个的.所以大家谨慎更新翼龙面板.

发表评论

》表情