使用 ansible 从文件中的特定标记中删除特定字符串

使用 ansible 从文件中的特定标记中删除特定字符串

我需要使用 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以及要更改的文件的实际路径和名称。

相关内容