我对Ansible和艰难的写作脚本不熟悉。
在第一个任务中,如果目标作业能够终止,请执行查询。
在任务2中,执行另一个查询以终止满足条件的作业。但是,任务1和任务2是顺序执行的,因此我没有解决方案来组合使用存储在job_id_list
和query_result
中的值。
# task1
- name: Check the status of specific jobs
become: true
become_user: postgres
shell: psql -t -database -c "select count(*) from table_a a inner join table_b b on b.job_id = a.job_id where b.job_id={{ item }} and b.submitted_date > CURRENT_TIMESTAMP - interval '10 minutes';"
with_items: {{ job_id_list }}
register: query_result
# task2
- name: kill job when the result of task1 is 0
shell: psql -t database -c "update table_b set status='TERMINATED' where job_id={{ XXX }};" # here I struggle...
with_items: {{ query_result }}
become: true
become_user: postgres
when: query_result.stdout|int = 0
答案 0 :(得分:1)
您有job_id_list
,这是您在任务#1中迭代的项目列表。
查询数据库后,您将返回count(*)
,该数据库返回该job_id的数量。
在Task#2中,您要遍历查询结果,查询结果是一个数字或一个数字列表(职位数),并且此处没有job_id。您必须遍历相同的列表job_id_list
,但只有在query_result
为0时才能使用job_id
。我希望这会有所帮助!
编辑:当我再次重读查询时,我认为您的逻辑可能是错误的。 可能没有获得计数,而是获得了ID返回值,然后在Task#2中遍历要更新的ID列表。