我需要使用 ansible 从文件中的特定标记中删除特定字符串,如下所示,您可以从[pipeline:public_api]
我需要删除中看到admin_token_auth
[pipeline:public_api]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
期望的结果:
[pipeline:public_api]
pipeline = cors sizelimit url_normalize request_id build_auth_context token_auth json_body ec2_extension public_service
答案1
看看更换模块。这是我通常在 ansible 中使用的正则表达式:
该模块将替换文件中模式的所有实例。
就像是:
- replace:
path: /etc/keystone/keystone-paste.ini
regexp: '^(pipeline = .*) admin_token_auth(.*)'
replace: '\1\2'
应该管用。
编辑:
因为这并没有解决问题,所以我会使用sed
它,并将其与script
模块一起传递给 ansible。
首先是一个简单的sed
脚本,获取标签的行号,然后对该行进行更改后那个标签。例子:
#!/bin/bash
# Get line number of tag
tagLine=$(sed -n '/pipeline:public_api/=' mohd.txt)
# The line we want to change is below $tagLine
editLine=$((tagLine+1))
# Do the actual replacement on the correct line
sed "${editLine}s/ admin_token_auth//" mohd.txt
概念验证:
示例文件 ( mohd.txt
):
cat mohd.txt
[pipeline:public_bar]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
[pipeline:public_foo]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
[pipeline:public_api]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
[pipeline:public_abc]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
运行脚本mohd.txt
:
./pipeline_public_api.sh
[pipeline:public_bar]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
[pipeline:public_foo]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
[pipeline:public_api]
pipeline = cors sizelimit url_normalize request_id build_auth_context token_auth json_body ec2_extension public_service
[pipeline:public_abc]
pipeline = cors sizelimit url_normalize request_id admin_token_auth build_auth_context token_auth json_body ec2_extension public_service
如您所见,admin_token_auth
已从行中删除以下 [pipeline:public_api]
。
现在使用脚本模块在清单上的主机上执行该脚本。当然,除了-i
传递给 的标志sed
以及要更改的文件的实际路径和名称。