首页 > 解决方案 > Space Drain 无法重新暂存:无法从 UAA 获取令牌

问题描述

我正在通过 CLI 部署空间消耗,它可以正常工作/按预期运行大约 10 天......然后当它尝试在刷新令牌过期时重新部署自身时,我在空间消耗日志中收到这些错误。

2019-08-09T19:32:18.897-07:00 [APP/PROC/WEB/0] [ERR] 2019/08/10 02:32:18 starting space drain...
2019-08-09T19:32:19.044-07:00 [APP/PROC/WEB/0] [ERR] 2019/08/10 02:32:19 Failed to fetch tokens from UAA: Unexpected status code: 401

这似乎与此问题直接相关,并且问题中定位/引用的代码实际上我可以看到生成确切错误的代码。

https://github.com/cloudfoundry/cf-drain-cli/issues/21

但是,我通读了该问题,但即使问题已关闭,我也不清楚修复方法是什么?

如果我尝试重新部署它,它会再次失败,我让它工作的唯一方法是清理它并重新部署它

cf drain-space syslog://<sysloghost>:<port> --drain-name my-space-drain

然后它再次工作,直到令牌似乎过期......重复等等。

标签: cloud-foundrysyslogcloudfoundry-uaa

解决方案


但是,我通读了该问题,但即使问题已关闭,我也不清楚修复方法是什么?

我也没有看到解决该问题的方法。那里的解释也不完全清楚。刷新令牌最终会过期。UAA 不允许您永远保留一个(至少在撰写本文时)。您也不能刷新刷新令牌,所以当它过期时就是这样。你唯一能做的就是再次登录,所以除非应用程序正在存储用户凭据,它似乎没有这样做并且是一个坏主意,否则它无法获得另一个刷新令牌。这可能就是你经常遇到这个问题的原因。

如果我尝试重新部署它,它会再次失败,我让它工作的唯一方法是清理它并重新部署它

我认为这是因为应用程序的配置方式。看起来它被赋予了一个作为环境变量的刷新令牌。因此,重新分期无济于事。

当该令牌过期时,您需要使用新的刷新令牌更新 env 变量。您可以从中获取当前的刷新令牌~/.cf/config.json(这是 cf cli 插件正在执行的操作,请参阅[1][2]。这是您当前使用 cf cli 登录的用户的刷新令牌(除非您使用备用 $ CF_HOME,那么它将位于 $CF_HOME 下)。

如果您使用的是 Linux/Mac,则可以运行jq -r .RefreshToken ~/.cf/config.json以获取令牌。

获得令牌后,使用新令牌运行cf set-env并更新REFRESH_TOKENenv 变量。那应该可以解决它,并且应该比清理和重新部署要快一些。

希望有帮助!


推荐阅读