我的ansible清单包含一个动态生成IP地址的组。
[asg]
10.15.100.13
10.15.100.14
是否可以在[asg]
之后删除该行? (即10.15.100.13
)
此组中的IP地址是指自动缩放组中的ec2个实例。
lineinfile模块没有removeafter
选项。
我想知道在[asg]
之后是否有其他替代方法可以删除该行。
regexp
选项无效。因为IP地址经常变化。
答案 0 :(得分:1)
只要支持regexp,replace
就完全可以。
- replace:
path: /path/to/file
regexp: '\[asg\]\n[^\n]+' # Matches [asg] and next line
replace: '[asg]' # Replace both lines with [asg]
答案 1 :(得分:0)
我不确定是否可以使用lineinfile
或blockinfile
,但您可以使用sed
来实现它。 警告:此解决方案不是幂等。
- shell: /bin/sed -i.bak '/\[asg\]/{n;d}' my_inventory_file
该命令将删除[asg]
之后的行。它会自动创建一个.bak
扩展名的备份文件。根据您的操作系统,sed
的路径和参数可能会有所不同。您可以进一步优化regexp
:
- shell: sed -i.bak '/^\s*\[asg\]\s*$/{n;d}' my_inventory_file
{n;d}
或{n;d;} for MacOS
- 读取行(n)ext为pattern和(d)elete it