如何使用其他列表项编写循环?

时间:2019-11-26 12:53:47

标签: ansible

我对Ansible和艰难的写作脚本不熟悉。

在第一个任务中,如果目标作业能够终止,请执行查询。 在任务2中,执行另一个查询以终止满足条件的作业。但是,任务1和任务2是顺序执行的,因此我没有解决方案来组合使用存储在job_id_listquery_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

1 个答案:

答案 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列表。