首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不可用循环代替with_items

不可用循环代替with_items
EN

Stack Overflow用户
提问于 2022-04-28 08:41:52
回答 1查看 206关注 0票数 2

设想情况:

在所有日志旋转-配置文件中将日志轮转更改为每日。

  • /etc/logrotate.d/*
  • /etc/logrotate.conf

任务:

  1. 获取/etc/logrotate.d中的文件列表
代码语言:javascript
运行
复制
- find:
    paths: /etc/logrotate.d/
  register: logrotate_d
  1. 更改配置文件中的日志旋转
代码语言:javascript
运行
复制
- replace:
    path: "{{ item.path }}"
    regexp: '^(\s*)(daily|weekly|monthly|yearly)$'
    replace: "\\1daily"
  with_items: 
    - { path: "/etc/logrotate.conf" }
    - "{{ logrotate_d.files }}"
  loop_control:
    label: "{{ item.path }}"

问题:

如何在不出现以下错误的情况下将with_items替换为循环

代码语言:javascript
运行
复制
'list object' has no attribute 'path' 
EN

回答 1

Stack Overflow用户

发布于 2022-04-28 11:34:04

with_itemsloop作为有记录的这里的行为有一些不同。以下引用相关的双边投资条约:

. with_items执行隐式单层扁平.

因此,当您向with_items提供2个列表时,它们会被压缩为1 list,并且每个项目的path属性都是可用的。而对于loop,第二个列表logrotate_d.files仍然是一个单独的列表,这就是为什么不能访问item.path属性的原因。

对于您的使用,with_items似乎更合适。但是,如果您想将它与loop一起使用,则可以将其编写为:

代码语言:javascript
运行
复制
- replace:
    path: "{{ item.path }}"
    regexp: '^(\s*)(daily|weekly|monthly|yearly)$'
    replace: "\\1daily"
  loop: "{{ [ { 'path': '/etc/logrotate.conf' } ] + logrotate_d.files }}"
  loop_control:
    label: "{{ item.path }}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72040579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档