com*_*ewb 5 linux centos ansible
我正在尝试使用 ansible 禁用我服务器上的所有存储库,因此我正在尝试对一个目录中的多个文件进行替换,但似乎无法让它工作,任何想法都值得赞赏!
tasks:
- name: get repo names
raw: find /etc/yum.repos.d/ -type f -name "*.repo"
register: repos
- name: disable all repos
replace: dest={{repos}} regexp="enabled=1" replace="enabled=0"
with_items: repos.stdout_lines
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我只是收到一个错误,就像它试图一次完成所有这些?如果是这样,我将如何拆分它们?
/etc/yum.repos.d/CentOS-Debuginfo.repo\r\n/etc/yum.repos.d/epel.repo\r\n/etc/yum.repos.d/CentOS-Base.repo\r \n'} 不存在!",
更新:
- find:
paths: "/etc/yum.repos.d/"
patterns: "*.repo"
register: repos
- name: disable all repos
replace: dest={{items}} regexp="enabled=1" replace="enabled=0"
with_items: repos
Run Code Online (Sandbox Code Playgroud)
新错误如下:“msg”:“字段‘args’有一个无效值,它似乎包含一个未定义的变量。错误是:‘items’未定义
好的 越来越近了!现在在禁用回购中收到此错误:
FAILED! => {
"failed": true,
"msg": "'dict object' has no attribute 'stdout_lines'"
}
Run Code Online (Sandbox Code Playgroud)
Ala*_*nSE 10
这个问题似乎在没有完全完成的情况下就消失了……至少在使用时没有find。这是备受追捧的两步流程的示例。raw第一种情况的使用情况已得到答复。但我发现这个解决方案更有吸引力,即使更难:
tasks:
- name: Find all of the files inside this directory
find:
paths: "/etc/yum.repos.d/"
patterns: "*.repo"
register: repos
- name: Replace foo with bar in the files
replace:
path: "{{ item.path }}"
regexp: 'foo'
replace: 'bar'
with_items: "{{ repos.files }}"
Run Code Online (Sandbox Code Playgroud)
这需要对命令的输出结构进行一些研究find。
它是“一次尝试所有这些”,因为您提供前一个任务的整个输出作为以下参数dest:
dest={{repos}}
Run Code Online (Sandbox Code Playgroud)
相反,您应该提供您迭代的项目:
dest={{item}}
Run Code Online (Sandbox Code Playgroud)
您也不引用with_items.
第二个任务应该是这样的:
- name: disable all repos
replace: dest={{item}} regexp="enabled=1" replace="enabled=0"
with_items: "{{ repos.stdout_lines }}"
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用find模块代替raw命令。
| 归档时间: |
|
| 查看次数: |
9039 次 |
| 最近记录: |