Ansible 在任务中为'item'别名一个可解析的dict引用?

Ansible 在任务中为'item'别名一个可解析的dict引用?,ansible,Ansible,我有一个类似这样的任务: - name: Create cron job to backup foo (default is every day at 2AM ) cron: name="foo-database-backup" cron_file="foo-database-backup" minute="{{ foo.backup_policy.minute|default('0') }}" hour="{{ foo.backup_policy.hour|defa

我有一个类似这样的任务:

- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ foo.backup_policy.minute|default('0') }}"
    hour="{{ foo.backup_policy.hour|default('2') }}"
    day="{{ foo.backup_policy.day|default('*') }}"
    weekday="{{ foo.backup_policy.weekday|default('*') }}"
    month="{{ foo.backup_policy.month|default('*') }}"
    job="/bin/true"
---
foo:
  backup_policy:
    minute: 30
    hour: 3
    day: "*/3"
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ item.minute|default('0') }}"
    hour="{{ item.hour|default('2') }}"
    day="{{ item.day|default('*') }}"
    weekday="{{ item.weekday|default('*') }}"
    month="{{ item.month|default('*') }}"
    job="/bin/true"
  with_items: foo.backup_policy
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
        cron_file="foo-database-backup"
        minute="{{ item.minute|default('0') }}"
        hour="{{ item.hour|default('2') }}"
        day="{{ item.day|default('*') }}"
        weekday="{{ item.weekday|default('*') }}"
        month="{{ item.month|default('*') }}"
        job="/bin/true"
  with_items:
    - "{{ foo.backup_policy }}"
具有如下所示的相应组\u vars文件:

- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ foo.backup_policy.minute|default('0') }}"
    hour="{{ foo.backup_policy.hour|default('2') }}"
    day="{{ foo.backup_policy.day|default('*') }}"
    weekday="{{ foo.backup_policy.weekday|default('*') }}"
    month="{{ foo.backup_policy.month|default('*') }}"
    job="/bin/true"
---
foo:
  backup_policy:
    minute: 30
    hour: 3
    day: "*/3"
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ item.minute|default('0') }}"
    hour="{{ item.hour|default('2') }}"
    day="{{ item.day|default('*') }}"
    weekday="{{ item.weekday|default('*') }}"
    month="{{ item.month|default('*') }}"
    job="/bin/true"
  with_items: foo.backup_policy
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
        cron_file="foo-database-backup"
        minute="{{ item.minute|default('0') }}"
        hour="{{ item.hour|default('2') }}"
        day="{{ item.day|default('*') }}"
        weekday="{{ item.weekday|default('*') }}"
        month="{{ item.month|default('*') }}"
        job="/bin/true"
  with_items:
    - "{{ foo.backup_policy }}"
但是,我想知道,在复制代码片段时,是否可以通过将foo.backup\u policy dict引用别名化为任务中的项,从而使任务更具可读性,并且更不容易出错。我尝试使用以下内容来执行此操作:

- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ foo.backup_policy.minute|default('0') }}"
    hour="{{ foo.backup_policy.hour|default('2') }}"
    day="{{ foo.backup_policy.day|default('*') }}"
    weekday="{{ foo.backup_policy.weekday|default('*') }}"
    month="{{ foo.backup_policy.month|default('*') }}"
    job="/bin/true"
---
foo:
  backup_policy:
    minute: 30
    hour: 3
    day: "*/3"
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ item.minute|default('0') }}"
    hour="{{ item.hour|default('2') }}"
    day="{{ item.day|default('*') }}"
    weekday="{{ item.weekday|default('*') }}"
    month="{{ item.month|default('*') }}"
    job="/bin/true"
  with_items: foo.backup_policy
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
        cron_file="foo-database-backup"
        minute="{{ item.minute|default('0') }}"
        hour="{{ item.hour|default('2') }}"
        day="{{ item.day|default('*') }}"
        weekday="{{ item.weekday|default('*') }}"
        month="{{ item.month|default('*') }}"
        job="/bin/true"
  with_items:
    - "{{ foo.backup_policy }}"
但这并不像我所期望的那样有效,因为对于_items,我真的想要一个列表或集合,如果我尝试的话,我会得到一个错误


是否可以将此dict别名为项或任务中类似的较短内容,或者我是否应该停止尝试对内容进行如此多的微优化?

好的,这看起来有点奇怪,但我可以通过将其包装在Jinja模板中并将其放入单个元素列表中来实现:

- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ item.minute|default('0') }}"
    hour="{{ item.hour|default('2') }}"
    day="{{ item.day|default('*') }}"
    weekday="{{ item.weekday|default('*') }}"
    month="{{ item.month|default('*') }}"
    job="/bin/true"
  with_items:
    - "{{ foo.backup_policy }}"
与_项一起:[{{foo.backup_policy}]也可以工作


也许是因为我熟悉Ruby,但我想我一直希望Jinja-interpolation-in-a-string返回字符串类型。

这并不是您想要的答案,但您自己已经解决了,所以:您也可以通过在同一级别缩进cron参数来提高可读性,如下所示:

- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ foo.backup_policy.minute|default('0') }}"
    hour="{{ foo.backup_policy.hour|default('2') }}"
    day="{{ foo.backup_policy.day|default('*') }}"
    weekday="{{ foo.backup_policy.weekday|default('*') }}"
    month="{{ foo.backup_policy.month|default('*') }}"
    job="/bin/true"
---
foo:
  backup_policy:
    minute: 30
    hour: 3
    day: "*/3"
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
    cron_file="foo-database-backup"
    minute="{{ item.minute|default('0') }}"
    hour="{{ item.hour|default('2') }}"
    day="{{ item.day|default('*') }}"
    weekday="{{ item.weekday|default('*') }}"
    month="{{ item.month|default('*') }}"
    job="/bin/true"
  with_items: foo.backup_policy
- name: Create cron job to backup foo (default is every day at 2AM )
  cron: name="foo-database-backup"
        cron_file="foo-database-backup"
        minute="{{ item.minute|default('0') }}"
        hour="{{ item.hour|default('2') }}"
        day="{{ item.day|default('*') }}"
        weekday="{{ item.weekday|default('*') }}"
        month="{{ item.month|default('*') }}"
        job="/bin/true"
  with_items:
    - "{{ foo.backup_policy }}"