我正在尝试将路径部分替换或附加到 Linux 机器上 /etc/environment 中的路径定义。
这是我所拥有的:
//all.yml
my_path: "/usr/bin:/usr/sbin"
my_extra_path: "/usr/extra/path"
Run Code Online (Sandbox Code Playgroud)
在我的角色文件中:
//updatePath.yml
- name: update /etc/environment
lineinfile:
dest=/etc/environment
state=present
backrefs=yes
regexp='PATH=({{ my_path }}:?)?({{ my_extra_path }}:?)?(.*)'
line='PATH={{ my_extra_path }}:{{ my_extra_path }}:\3'
Run Code Online (Sandbox Code Playgroud)
现在,当我运行该角色时,它可以很好地更新现有的 PATH 行,但不会在该行内创建重复项,甚至不会创建重复的行。到目前为止,一切都很好。
当没有包含“PATH=”的行时,我希望它添加一个新行。但事实并非如此。
是我的预期错误还是问题出在哪里?
您正在使用该backrefs: true标志,如果该行尚不存在,该标志将阻止 lineinfile 更改文件。来自文档:
与状态=存在一起使用。如果设置,行可以包含反向引用(位置引用和命名引用),如果正则表达式匹配,这些引用将被填充。该标志稍微改变了模块的操作;insertbefore 和 insertafter 将被忽略,如果正则表达式与文件中的任何位置都不匹配,则文件将保持不变。如果正则表达式匹配,则最后一个匹配行将被扩展的行参数替换。
由于如果该行不存在则需要创建该行,因此应该使用:
- name: Check whether /etc/environment contains PATH
command: grep -Fxq "PATH=" /etc/environment
register: checkpath
ignore_errors: True
changed_when: False
//updatePath.yml
- name: Add path to /etc/environment
lineinfile:
dest=/etc/environment
state=present
regexp='^PATH='
line='PATH={{ my_extra_path }}'
when: not checkpath.rc == 0
- name: update /etc/environment
lineinfile:
dest=/etc/environment
state=present
backrefs=yes
regexp='PATH=({{ my_path }}:?)?({{ my_extra_path }}:?)?(.*)'
line='PATH={{ my_extra_path }}:{{ my_extra_path }}:\3'
when: checkpath.rc == 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12958 次 |
| 最近记录: |