关于Ansible API playbook查询分页的问题



我需要在我的剧本中查询Ansible Tower中的REST API Jobs端点。

我使用下面的代码来检索数据

- name: Pull Jobs Data
uri:
url: https://ansible.xxxx.com/api/v2/jobs/?format=json&page=1&page_size=200
headers:
Content-Type: application/json
Authorization: "Bearer {{ lookup('env', 'TOWER_PASSWORD') }}"
register: jobs_data
- name: Get last half hour of data
debug:
var: "{{item}}"
when:
- item['started'] > current_epoch_half_hour_back
loop: "{{ jobs_data['json']['results'] }}"

我只对最近半小时的就业数据感兴趣。

我们保持大约2周,这是大约15,000页的工作数据,当我使用上面的page=1page_size=200时,它似乎从第1页开始,这是最古老的数据,似乎只看前200页,因此完全错过了最新的数据。RedHat表示,您可以通过修改以下文件/etc/tower/conf.d/<some file>.py来更改限制,但建议不要超过200。

有没有人知道如何让查询开始在最后一页(最新的数据),而不是第1页(最旧的数据)?

不想硬编码page=值,因为我不知道最后一页的确切值。

************************* 更新在这个问题上 *****************************

我为反向排序添加了负order by子句,它可以工作。谢谢你的提示。

url: https://aap.prci.com/api/v2/jobs/?format=json&page=1&page_size=600&order_by=-{{'started'}}

但是我只需要最后半小时的数据。为此,我执行以下操作

- set_fact:
half_hour_back: "{{ '%Y-%m-%dT%H:%M:%S'|strftime((ansible_date_time.epoch|int) - (60*60*0.5)) }}"

- name: Add jobs data to dictionary
set_fact:
list_of_jobs_info: "{{ list_of_jobs_info + [{ 'job_id' : item['id'], 'job_name' : item['name'], 'job_status' : item['status'] }] }}"
when:
- item['status'] == "canceled"
- item['started'] > half_hour_back
loop: "{{ jobs_data['json']['results'] }}"

";比;half_hour_back";这个条件在伦敦塔管用,但在AAP不行。有人知道在Tower和AAP之间的API有什么变化吗?当我看到&quot的数据类型时;"开始;似乎是以下格式

"started": "2022-11-15T20:00:07.881083Z",

我怀疑AAP API对数据类型检查更严格。有人知道如何在half_hour_back变量中获得正确的格式,以便我可以在when条件中使用它进行比较吗?

根据关于Ansible Tower REST API - Jobs的文档,你可以只执行排序通过?order_by=,也可以是id,started或其他记录在那里的字段。通过这样做,您可以将结果集减小到不再需要分页的大小。

最新更新