3

ユーザーのテナントのリストを取得する方法を知っている人はいますか? テナントのユーザーを取得でき、すべてのテナントのリストを取得できることはわかっているので、技術的にはすべてのテナントをループして特定のユーザーを探すことができますが、それは面倒なアプローチのように思えます。

4

4 に答える 4

2

keystone-client についてはわかりませんが、バージョン 3 の keystone API では可能です:

GET /v3/users/['USER_ID']/projects

于 2014-08-22T08:57:40.277 に答える
1

これは、CLI または API では実装されていません。トークンがアクセスできるすべてのテナントを一覧表示できますが、ユーザー ID でテナントを一覧表示することはできません。

Keystone は、ユーザーをテナントとロールに関連付けます。したがって、基本的に、ユーザーのすべてのロールを一覧表示して、すべてのテナントを取得できるはずです。しかし、実際には、次のことはできません。

Keystone クライアントにはuser-role-listサブコマンドがtenant-idありますが、次の例に示すように必須です。

$ keystone --token <...> --endpoint http://<...> user-role-list
'Client' object has no attribute 'auth_tenant_id'

$ keystone --token <...> --endpoint http://<...> user-role-list --user-id 0ab2b35d609d4994aa3100b13bcf9cb8
'Client' object has no attribute 'auth_tenant_id'

$ keystone --token <...> --endpoint http://<...> user-role-list --user-id 0ab2b35d609d4994aa3100b13bcf9cb8 --tenant-id 74ece217e4f543c5bd1387786fd9173c
+----------------------------------+-------+----------------------------------+----------------------------------+
|                id                |  name |             user_id              |            tenant_id             |
+----------------------------------+-------+----------------------------------+----------------------------------+
| 3ddf15ce213e4fa08f4d5769db4ee30b | admin | 0ab2b35d609d4994aa3100b13bcf9cb8 | 74ece217e4f543c5bd1387786fd9173c |
+----------------------------------+-------+----------------------------------+----------------------------------+  

同じことが Rest API にも当てはまります。

/users/{user_id}/roles は、ポート 35357 で HTTP 501 (およびポート 5000 で HTTP 404) を返します。

$ curl -H "X-Auth-Token:..." http://localhost:35357/v2.0/users/aa1a4faf337544f8a29eb033fa895eef/roles | jq '.'
{
  "error": {
    "title": "Not Implemented",
    "code": 501,
    "message": "User roles not supported: tenant ID required"
  }
}

テナント ID を指定すると、次のように機能します。

$ curl -H "X-Auth-Token:..." http://localhost:35357/v2.0/tenants/8e0c523848e645be829c779bb9307290/users/aa1a4faf337544f8a29eb033fa895eef/roles | jq '.'
{
  "roles": [
    {
      "id": "9fe2ff9ee4384b1894a90878d3e92bab",
      "name": "_member_",
      "description": "Default role for project membership",
      "enabled": "True"
    },
    {
      "name": "admin",
      "id": "3ddf15ce213e4fa08f4d5769db4ee30b"
    }
  ]
}

完全を期すために、Rest API を使用してトークンでテナントを取得できます。

$ curl -H "X-Auth-Token:<token here>" http://localhost:5000/v2.0/tenants/ | jq '.'
{
  "tenants": [
    {
      "name": "Altair",
      "id": "51b8b30d4e574899b8fef6d819fda389",
      "enabled": true,
      "description": ""
    },
    {
      "name": "Aldebaran",
      "id": "92b1315b07f44afdaec920a868685b28",
      "enabled": true,
      "description": ""
    }
  ],
  "tenants_links": []
}
于 2013-03-21T01:03:46.583 に答える
1

user3067622 の提案を使用して、Keystone から認証トークンを取得した後、次の構文が機能しました。

curl -v http://your.cloud.com:35357/v3/users/<user_UUID>/projects -X GET \
-H 'Content-type: application/json' \
-H 'Accept: application/json' \
-H "X-Auth-Token: 27427040f887440c80ed6a697b294c47" | python -m json.tool | grep name
于 2014-11-11T01:11:01.460 に答える
-2

あまり。ただし、keystone API から直接できます。

例:

    from keystoneclient.v2_0 import client
    from keystoneclient.v2_0 import tokens

    # keystone = client.Client(username=username, password=password, tenant_name=tenant_name, auth_url=auth_url)
    keystone = client.Client(username=username, password=password, auth_url=auth_url)
    token = keystone.auth_token
    headers = {'X-Auth-Token': token }
    tenant_url = auth_url
    tenant_url += '/tenants'
    r = requests.get(tenant_url, headers=headers)
    tenants_raw = r.raw.read(900000)
    tenant_data = json.loads(tenants_raw)
    success = 0
于 2013-03-20T22:30:49.043 に答える