EGI-Foundation.voms-client
EGI VOMS 客户端
一般信息
关于 VOMS 和 VO
这是一个配置 VOMS 客户端的 Ansible 角色。VOMS 是一个用于管理虚拟组织成员资格的网络服务。VOMS 客户端是必需的,以便根据虚拟组织成员资格获取与特定服务交互的授权(以短期代理的形式)。VOMS 客户端是一组命令行工具,它们向相关的 VOMS 服务器发送经过身份验证的请求,以请求授权。
要使用 VOMS 客户端,个人需要:
- 拥有个人的 x.509 证书
- 在他们想要获取授权的虚拟组织中注册
VOMS 客户端通常安装在用户界面或工作节点上。
配置
VOMS 客户端的配置通过一些文件完成:
.lsc
文件vomses
文件
有关更详细的信息,请参见 VOMS 文档。
对于每个你想交互的虚拟组织,相关的配置需要到位。这可能是一个耗时的任务,特别是在站点管理员不知道应该配置哪些虚拟组织的情况下。
为了使生活更轻松,我们采用了数据驱动的方法。
所需的数据通过 EGI 操作门户 API 提供,作为该角色的数据源。这使我们能够一次性配置在操作门户中注册的所有虚拟组织。有两种方法可以生成配置:
- 从在 Ansible 运行时从 Lavoisier 拉取的原始数据生成配置
- 从在 Ansible 运行时之前从 Lavoisier 拉取的过滤数据生成配置
在前一种方法中,可以使用精心制作的 json_query
来迭代从 Lavoisier 返回的数据。在这种情况下,查询需要反映 Lavoisier 返回的数据对象的复杂性和结构,无法假设返回一致的数据数组。在后一种方法中,使用一个简单的过滤数据对象来迭代,这个数据对象经过过滤以排除不包含相关信息的项目。这个缓存数据可以通过一个简单的 Python 脚本轻松创建 —— files/create_clean_vo_data.py,该脚本读取角色变量并创建数据的本地缓存。数据格式被选择为 YAML,以便我们可以将其添加到库中并跟踪更改 —— 使用 JSON 会很困难,因为缺少行。
我们选择了后一种方法(见 4215026e18c),原因如下:
- 维护一个良好文档的脚本比复杂的 JSON 查询要容易得多。
- 阅读一个良好文档的脚本比复杂的 JSON 查询要容易得多。
- 如果该角色作为 playbook 的依赖项(这肯定是因为 VOMS 客户端在各处使用),那么数据需要是可用的。
然而,缺点是库中的数据可能会迅速与 Lavoisier 上的实际数据不同步。这可能发生在个人手动编辑缓存时,或者维护者在必要时没有运行脚本。克服此问题的唯一方法是维护一个强大的测试套件。
更新 VO 数据
要使用 files/create_clean_vo_data.py 更新 VO 数据,您需要一个身份验证令牌来与 EGI 操作门户 API 进行交互。
令牌可以通过在 EGI 签到 中进行身份验证时,访问 操作门户 API 文档页面,按照页面上的说明生成,然后在运行 files/create_clean_vo_data.py 之前将令牌导出到环境中。
可以使用 curl 调用测试令牌是否正常工作:
# 导出操作门户 API 令牌
$ export OPS_PORTAL_API_TOKEN='...'
# 使用 curl 测试 API 调用
$ curl -X GET "https://operations-portal.egi.eu/api/vo-voms/json" \
-H "Accept: application/json" \
-H "X-API-Key: $OPS_PORTAL_API_TOKEN"
一旦确认 curl
调用正常工作,就可以使用提供的脚本:
# 导出操作门户 API 令牌
$ export OPS_PORTAL_API_TOKEN='...'
# 更新 VO 数据
$ ./files/create_clean_vo_data.py
测试
该角色使用 molecule 进行以下场景的测试:
default
(使用 TestInfra 测试)
测试覆盖单元测试和集成测试,但不包括功能测试,因为使用 VOMS 客户端需要个人证书。包括的特定测试有:
- 二进制可执行文件是否存在
- 配置目录是否存在
- 选定 VO 的配置文件内容
需求
请参见 requirements.txt
。
角色变量
保存在 defaults/main.yml
中的角色变量包括:
prerequisites
- 所需的操作系统基础包voms_dir
、vomses_dir
- 在目标主机上包含 voms 信息的目录位置lavoisier
- 提取必要数据以填充配置文件所需的 lavoisier 框架端点。
无需更改默认变量。
依赖
依赖关系在元数据中没有明确定义,但该角色依赖于 UMD 角色:
- { role: EGI-Foundation.umd, release: 4 }
示例 Playbook
- hosts: servers
roles:
- { role: EGI-Foundation.umd, release: 4 }
- { role: EGI-Foundation.voms-client }
许可证
Apache-2.0
作者信息
请参见 AUTHORS.md。