concourse - 从资源访问 Concourse REST API
问题描述
我正在尝试编写访问 Concourse 实例的 REST API 以获取信息的自定义 Concourse 资源(在 Python 中)。我被困在登录时获取不记名令牌。问题是当我遵循这个 shell 脚本的要点时
#!/bin/bash
## Variables required #need to update these to take inputs for getting token per team and target.
CONCOURSE_URL="http://localhost:8080"
CONCOURSE_USER="test"
CONCOURSE_PASSWORD="test"
CONCOURSE_TEAM="test"
CONCOURSE_TARGET="my-concourse"
function get_token() {
## Create a file named token that will be used to read and write tokens
touch token
## extract the LDAP authentication url and write to token file
LOCAL_AUTH_URL=$CONCOURSE_URL$(curl -b token -c token -L "$CONCOURSE_URL/sky/login" -s | grep "/sky/issuer/auth/local" | awk -F'"' '{print $4}')
echo "url is $LOCAL_AUTH_URL"
# login using username and password while writing to the token file
curl -s -o /dev/null -b token -c token -L --data-urlencode "login=$CONCOURSE_USER" --data-urlencode "password=$CONCOURSE_PASSWORD" "$LOCAL_AUTH_URL"
ATC_BEARER_TOKEN=`grep 'Bearer' token | cut -d\ -f2 | sed 's/"$//'`
echo $ATC_BEARER_TOKEN
}
涉及到许多重定向,至少其中一些将大厅实例称为http://localhost:8080,这在资源的 docker 容器内部不起作用。
所以我想参数化外部基本 url 并在资源配置中明确给出它。手动处理重定向并将本地 IP 重写为 URL 在最后一个“批准”步骤失败,代码为 400,可能是因为它看起来像是某种跨域攻击。
环境变量 ATC_EXTERNAL_URL 始终是 localhost:8080 我怀疑在形成重定向 url 时也会使用它。这可以设置在某个地方吗?
我不擅长 golang,但在我看来https://github.com/concourse/concourse-pipeline-resource调用 fly 二进制文件以从资源内部实现某种登录。不能说我能得到它的作用和方法。
所有帮助表示赞赏...
解决方案
env var$ATC_EXTERNAL_URL
很可能对应于您启动 Concourse 时指定的外部 url,所以是的,它可以(并且如果您使用 Github 或 OAuth 等外部身份验证,则必须)更改。您假设它用于构造回调 URL 是正确的。
此外,我不想成为 That Guy(TM),但 Concourse REST API 不是公开的,随时可能更改。你想做什么,你不能从fly
CLI 得到什么?您的资源可以在ATC_EXTERNAL_URL
需要时调用来获取 fly CLI,然后以这种方式执行命令。
推荐阅读
- laravel - 在 laravel 中下载文件
- python-3.x - RuntimeError: _th_normal 在 CPUType 上不支持 Long
- python - 为什么我不能运行我的脚本,模块问题
- bash - 创建目录后立即更改目录权限和所有者的脚本?
- python - Python 的 UnboundLocalError 和内联变量的赋值
- python - 定时轮换文件日志
- variables - 詹金斯,全球变量
- c# - 从 Json 创建的键值列表,转换回 Json
- c# - 为什么重复 Enumerable 到 Observable 转换块
- constraints - Pyomo 约束 > 100000 或 0