跳到内容

社区 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 当前不支持删除特定的旧角色版本。

删除集合