microsoftgraph / microsoftgraph/msgraph-sdk-python
Group members request gives an incomplete list
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 630
- Fork
- 96
- Merge trung bình
- 15 giờ 20 phút
- Pull request đã merge (30 ngày)
- 3
Mô tả
Describe the bug
I am trying to use Ansible to update membership of an Entra group with managed identities in it. It is misbehaving because the list of members it gets back from the GraphServiceClient is incomplete - in my case, only 20 of the 35 members listed in the Azure portal actually show up, even with the msgraph_beta SDK.
Expected behavior
A list of all the users in the Direct Members section of the group in the Azure portal.
How to reproduce
SP is created with:
az identity create -g {{ resource_group }} -n {{ application_name }}-mi -o json
Attached is a minimal(ish) test example to get members from a group and also fetch a single service principal (that should be in the group but isn't) by object_id. The SP does exist, with odata_type='#microsoft.graph.servicePrincipal'
import asyncio
from msgraph_beta.generated.groups.groups_request_builder import GroupsRequestBuilder
from msgraph_beta.generated.models.group import Group
from msgraph_beta.generated.groups.item.transitive_members.transitive_members_request_builder import \
TransitiveMembersRequestBuilder
from msgraph_beta.generated.groups.item.group_item_request_builder import GroupItemRequestBuilder
from msgraph_beta.generated.models.reference_create import ReferenceCreate
from msgraph_beta.generated.users.item.user_item_request_builder import UserItemRequestBuilder
from msgraph_beta.generated.service_principals.service_principals_request_builder import ServicePrincipalsRequestBuilder
from msgraph_beta import GraphServiceClient
from azure.identity import DefaultAzureCredential
class Blah:
def __init__(self):
self.azure_credential_track2 = DefaultAzureCredential()
self._client = self.get_msgraph_client()
def get_msgraph_client(self):
return GraphServiceClient(self.azure_credential_track2)
async def get_raw_group_members(self, group_id, filters=None):
request_configuration = GroupItemRequestBuilder.GroupItemRequestBuilderGetRequestConfiguration(
query_parameters=GroupItemRequestBuilder.GroupItemRequestBuilderGetQueryParameters(
# this ensures service principals are returned
# see https://learn.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0&tabs=http
expand=["members"]
),
)
if filters:
request_configuration.query_parameters.filter = filters
group = await self._client.groups.by_group_id(group_id).get(request_configuration=request_configuration)
return group.members
async def get_user(self, user_id):
req = ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetRequestConfiguration(
query_parameters=ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetRequestConfiguration()
)
user = await self._client.service_principals.by_service_principal_id(user_id).get(request_configuration=req)
return user
def test(self, group_id):
ret = asyncio.get_event_loop().run_until_complete(self.get_raw_group_members(group_id))
current_members = [(object.id, object.display_name, object.odata_type) for object in ret]
return current_members
def test2(self, user_id):
ret = asyncio.get_event_loop().run_until_complete(self.get_user(user_id=user_id))
print(ret)
def main():
group_id = "XXXXXX-YYYY-4e07-a3ab-6de8cbd4e560"
user_id = "XXXXXX-YYYY-4b39-9842-0a1e617f6497"
t = Blah()
cm = t.test(group_id)
print("========================")
for c in cm:
print(f" {c[0]} {c[2]} {c[1]}")
t.test2(user_id)
if __name__ == "__main__":
main()
SDK Version
No response
Latest version known to work for scenario above?
No response
Known Workarounds
No response
Debug output
Click to expand log
```</details>
### Configuration
- Linux (ubuntu 24.04) on x64
- Python 3.12 (same in 3.11)
- msgraph-beta-sdk 1.33.0
- msgraph-core 1.3.3
- msgraph-sdk 1.6.0
### Other information
_No response_
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Issue không nêu tên tệp hoặc bài kiểm thử nào trong repository. Trước tiên, hãy chạy bản tái hiện Python được cung cấp với các phiên bản msgraph-beta-sdk và msgraph-core được liệt kê, sau đó kiểm tra yêu cầu thành viên nhóm của GraphServiceClient và cách yêu cầu này xử lý phân trang hoặc mở rộng. Hoàn tất khi SDK trả về tất cả thành viên trực tiếp của nhóm, bao gồm cả service principal, thay vì chỉ 20 thành viên đầu tiên.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- ansible, azure, python
- Lĩnh vực
- api, backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 35/100