ansible을 사용하여 파일의 특정 태그에서 특정 문자열을 제거합니다.

ansible을 사용하여 파일의 특정 태그에서 특정 문자열을 제거합니다.

[pipeline:public_api] 제거해야 함에서 볼 수 있듯이 아래와 같이 ansible을 사용하여 파일의 특정 태그에서 특정 문자열을 제거해야 합니다.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와 변경될 파일의 ​​실제 경로 및 이름은 제외됩니다.

관련 정보