我正在尝试编写访问 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 二进制文件以从资源内部实现某种登录。不能说我能得到它的作用和方法。
所有帮助表示赞赏...