从资源访问 Concourse REST API

Accessing Concourse REST API from resource

我正在尝试编写访问 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 }')
  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
}

涉及许多重定向,其中至少有一些将 concourse 实例引用为 http://localhost:8080,这在资源的 docker 容器内部不起作用。

所以我想参数化外部基础 url 并在资源配置中明确提供它。手动处理重定向并将本地 IP 重写到 URL 在最后 "approval" 步骤失败,代码为 400,可能是因为它看起来像是某种跨域攻击。

环境变量 ATC_EXTERNAL_URL 始终是 localhost:8080,我怀疑在形成重定向 url 时也使用了它。这可以在某处设置吗?

我不擅长 golang,但在我看来 https://github.com/concourse/concourse-pipeline-resource 调用 fly 二进制文件以从资源内部实现某种登录。不能说我能得到它的作用和方法。

感谢所有帮助...

环境变量 $ATC_EXTERNAL_URL 很可能对应于您启动 Concourse 时指定的外部 url,所以是的,它可以(如果您使用 Github 之类的外部身份验证或 OAuth,必须)更改。您假设它用于构造回调 URL 是正确的。

此外,我不想成为那个人 (TM),但 Concourse REST API 不是 public,并且随时可能更改。您想要做什么,但无法从 fly CLI 获得?您的资源可以在需要时调用 ATC_EXTERNAL_URL 获取 fly CLI,然后以这种方式执行命令。