2015-02-07 18 views
2

我有一個Ansible任務,看起來像這樣:Alias一個Ansible字典引用任務中的`item`?

- 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" 

與相應group_vars文件看起來像這樣:

--- 
foo: 
    backup_policy: 
    minute: 30 
    hour: 3 
    day: "*/3" 

不過,我在想,如果我可以做的任務更具可讀性和在複製代碼片段時,通過在任務中將字典參考item別名,可以減少出錯的機率。我試着這樣做使用with_items這樣的:

- 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 

但由於with_items不工作(因爲我非常期待)真正想要的清單或設置(我得到錯誤with_items expects a list or a set如果我嘗試)。

是否有可能將此詞典的別名縮寫爲item或類似於任務內部的短語,還是應該停止嘗試微觀優化這麼多內容?

回答

1

不是真的你要找的,但答案你自己解決它已經無論如何,所以:

- 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 }}" 
:您可以通過縮進在同一水平上的 cron參數所有,這樣也提高可讀性
1

好吧,這看起來有點怪異,但是我能夠得到它通過在神社模板包裹它,並把它的單元素列表內的工作:

- 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 }}" 

with_items: [ "{{ foo.backup_policy }}" ]也適用)

也許這是我對Ruby的熟悉,但我想我總是期待Jinja-interpolation-in-a-string返回一個String類型。