社区 Galaxy 管理¶
创建新的 v3 命名空间¶
V3 命名空间可以通过两种方法创建:API 或 WebUI。
WebUI¶
1) 以超级用户身份登录 2) 在左侧导航栏中展开“集合” 3) 点击左侧导航栏中的“命名空间” 4) 点击顶部标题中间的“创建”按钮。 5) 填写合适的名称。 6) 点击“创建”保存。 7) 在新命名空间的摘要页面中,点击右上角的 3 个点汉堡包图标。 8) 从菜单中选择“编辑命名空间”。 9) 填写各种详细信息,例如公司名称、徽标 URL 和描述。 10) 点击“保存”
API¶
$ curl -X POST \
-H 'Authorization: token <TOKEN>' \
-H 'Content-Type: appliction/json' \
-d '{"name": "foobar", "groups": []}' \
https://galaxy-dev.ansible.com/api/_ui/v1/namespaces/
待办事项:通过 API 设置命名空间详细信息。
设置命名空间所有者¶
galaxy_ng 中的社交身份验证已根据 https://github.com/ansible/galaxy_ng/pull/1881 进行了大量自定义
“旧式”命名空间是 api/v1 样式的命名空间,允许任何有效的 github 用户名作为名称。
“v3”命名空间是 api/v3 和 pulp 相关的命名空间,它仅限于允许的 python 包名称,因为 v3 仅专注于 ansible 集合。
旧式命名空间应与 v3 命名空间(我们将其称为“提供者”命名空间)具有外键关系。 提供者命名空间是应进行所有者管理的地方。
galaxy 上的用户应该能够将角色导入到他们的旧式命名空间中,并将集合上传到他们的提供者命名空间(或他们已添加到其中的任何 v3 命名空间)。当用户登录 galaxy 时,后端应自动验证并创建他们的旧式命名空间和提供者/v3 命名空间。
通过 django shell 验证和修复用户¶
pulpcore-manager shell
from galaxy_ng.app.models import User
from galaxy_ng.app.api.v1.models import LegacyNamespace
from galaxy_ng.app.models import Namespace
from galaxy_ng.app.utils import rbac
from pulpcore.plugin.util import get_groups_with_perms_attached_roles
from pulpcore.plugin.util import get_users_with_perms_attached_roles
# find the user ...
sean = User.objects.filter(username='sean-m-sullivan').first()
# find the user's legacy namespace ...
legacy_namespace = LegacyNamespace.objects.filter(name='sean-m-sullivan').first()
assert legacy_namespace is not None
# check the "provider" namespace of the legacynamespace ...
provider_namespace = legacy_namespace.namespace
assert provider_namespace is not None
# get a list of owners for the provider namespace ...
owners = rbac.get_v3_namespace_owners(provider_namespace)
assert sean in owners
修复 sean 在 sean-m-sullivan/sean_m_sullivan 命名空间上的 RBAC ...
provider_namespace = Namespace.objects.filter(name='sean_m_sullivan').first()
rbac.add_user_to_v3_namespace(sean, provider_namespace)
owners = rbac.get_v3_namespace_owners(provider_namespace)
assert sean in owners
legacy_namespace.namespace = provider_namespace
legacy_namespace.save()
修复 sean 在 Wilk42/wilk42 命名空间上的 RBAC ...
legacy_namespace = LegacyNamespace.objects.filter(name='Wilk42').first()
# this legacy namespace already had the provider namespace of wilk42
rbac.add_user_to_v3_namespace(sean, legacy_namespace.namespace)
owners = rbac.get_v3_namespace_owners(legacy_namespace.namespace)
assert sean in owners
通过 API 验证和修复用户¶
查找旧式命名空间 ...
curl https://galaxy-dev.ansible.com/api/v1/namespaces/?name=Wilk42 | jq .
检查提供者命名空间 ...
$ curl -s https://galaxy-dev.ansible.com/api/v1/namespaces/?name=Wilk42 | jq .results[0].summary_fields.provider_namespaces
[
{
"id": 19193,
"name": "wilk42",
"pulp_href": "/api/pulp/api/v3/pulp_ansible/namespaces/19193/"
}
]
将提供者命名空间绑定到旧式命名空间 ...
$ curl -X POST \
-H 'Authorization: token <TOKEN>' \
-H 'Content-Type: appliction/json' \
-d '{"id": 19192}' \
https://galaxy-dev.ansible.com/api/v1/namespaces/7532/providers/
检查所有者 ...
$ curl -s https://galaxy-dev.ansible.com/api/v1/namespaces/?name=Wilk42 | jq .results[0].summary_fields.
owners
[
{
"id": 7184,
"username": "Wilk42"
},
{
"id": 17656,
"username": "sean-m-sullivan"
}
]
设置提供者命名空间的所有者列表 ...
$ curl -X POST \
-H 'Authorization: token <TOKEN>' \
-H 'Content-Type: appliction/json' \
-d '{"owners": [{"id": 7184}, {"id": 17656}]}' \
https://galaxy-dev.ansible.com/api/v1/namespaces/7532/owners/
删除旧角色¶
旧角色 RBAC 应允许超级用户和旧式命名空间所有者删除他们拥有的角色 ...
$ curl -X DELETE \
-H 'Authorization: token <TOKEN>' \
https://galaxy-dev.ansible.com/api/v1/roles/<roleid>/
API 当前不支持删除特定的旧角色版本。