macadmins / macadmins/jamf-pro-sdk-python
[Bug] Create/Update Advanced Computer Search Methods Sending Empty Criteria
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 69
- Forks
- 16
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
tl;dr when attempting to create or update an advanced computer search (using the create_advanced_computer_search or update_advanced_computer_search_by_id methods, respectively), the operation is completed successfully, except for the search criteria. Name and display fields are set as configured, but any criteria sent are seemingly ignored, and the search is created/updated with no criteria. This effectively places every device into the results for the advanced computer search.
Reproduction details below will be for creating a search, but the result is the same when attempting to update an existing search.
Steps to Reproduce
from jamf_pro_sdk import JamfProClient, SessionConfig
from jamf_pro_sdk.models.classic import computer_groups, advanced_computer_searches
from jamf_pro_sdk.models.classic.criteria import ClassicCriterion
from jamf_pro_sdk.clients.auth import ApiClientCredentialsProvider
jamfClient = JamfProClient(
server=jamfURL,
credentials=ApiClientCredentialsProvider(jamfClientID, jamfClientSecret),
session_config=SessionConfig(**{"timeout": 30, "max_retries": 3}),
)
notUpdatedSearchData = advanced_computer_searches.ClassicAdvancedComputerSearch(
name="macOS Version Not Current",
criteria=[
ClassicCriterion(
name='Managed',
priority=0,
and_or='and',
search_type='is',
value='Managed',
opening_paren=False,
closing_paren=False
),
ClassicCriterion(
name='Operating System Version',
priority=1,
and_or='and',
search_type='less than',
value='15.1',
opening_paren=False,
closing_paren=False
)
],
display_fields=[
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="JSS Computer ID"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Last Check-in"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Serial Number"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Operating System Version"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Username"
),
],
)
searchID = jamfClient.classic_api.create_advanced_computer_search(data=notUpdatedSearchData)
searchData = jamfClient.classic_api.get_advanced_computer_search_by_id(advanced_search=searchID)
print(searchData)
Expected Result
Expected an advanced computer search to be created with the following criteria:
Actual Result
Advanced computer search created with no criteria:
id=6 name='macOS Version Not Current' site=ClassicSite(id=-1, name='None') criteria=[] display_fields=[ClassicAdvancedComputerSearchDisplayField(name='Username'), ClassicAdvancedComputerSearchDisplayField(name='Operating System Version'), ClassicAdvancedComputerSearchDisplayField(name='JSS Computer ID'), ClassicAdvancedComputerSearchDisplayField(name='Serial Number'), ClassicAdvancedComputerSearchDisplayField(name='Last Check-in')]
(omitted computers from above output)
Additional Data
If I retrieve the criteria from an existing advanced computer search (with correct criteria) and feed that directly into the create method, I would definitely expect this criteria to be valid and accepted. Even doing this, the new search is created with no criteria:
knownGoodSearchCriteria = jamfClient.classic_api.get_advanced_computer_search_by_id(advanced_search=5).criteria
print(knownGoodSearchCriteria)
####
[ClassicCriterion(name='Managed', priority=0, and_or='and', search_type='is', value='Managed', opening_paren=False, closing_paren=False), ClassicCriterion(name='Operating System Version', priority=1, and_or='and', search_type='less than', value='15.1', opening_paren=False, closing_paren=False)]
####
notUpdatedSearchData = advanced_computer_searches.ClassicAdvancedComputerSearch(
name="macOS Version Not Current",
criteria=knownGoodSearchCriteria,
display_fields=[
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="JSS Computer ID"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Last Check-in"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Serial Number"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Operating System Version"
),
advanced_computer_searches.ClassicAdvancedComputerSearchDisplayField(
name="Username"
),
],
)
searchID = jamfClient.classic_api.create_advanced_computer_search(data=notUpdatedSearchData)
searchData = jamfClient.classic_api.get_advanced_computer_search_by_id(advanced_search=searchID)
print(searchData)
####
id=7 name='macOS Version Not Current' site=ClassicSite(id=-1, name='None') criteria=[] display_fields=[ClassicAdvancedComputerSearchDisplayField(name='Username'), ClassicAdvancedComputerSearchDisplayField(name='JSS Computer ID'), ClassicAdvancedComputerSearchDisplayField(name='Last Check-in'), ClassicAdvancedComputerSearchDisplayField(name='Serial Number'), ClassicAdvancedComputerSearchDisplayField(name='Operating System Version')]
####
(again omitted computers)
System Information
macOS 15.1
Python 3.12.1
SDK 0.6a2
Jamf Pro 11.10.2
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza en los puntos de entrada create_advanced_computer_search y update_advanced_computer_search_by_id, y luego sigue cómo se serializa ClassicAdvancedComputerSearch.criteria para la solicitud de Jamf Pro. Reproduce el problema con los ejemplos de criteria proporcionados y verifica que crear y actualizar una búsqueda conserve los criterios al recuperarla por ID.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- api
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100