removendo uma string específica de uma tag específica em um arquivo usando ansible

0

Eu preciso excluir uma string específica de determinada tag em um arquivo usando ansible, como abaixo você pode ver a partir de [pipeline:public_api] eu preciso remover 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

Resultado desejado:

[pipeline:public_api]
pipeline = cors sizelimit url_normalize request_id build_auth_context token_auth json_body ec2_extension public_service
    
por Mohd 01.07.2017 / 18:58

1 resposta

1

Dê uma olhada no substitua o módulo . É o que eu normalmente uso para expressões regulares em ansible:

This module will replace all instances of a pattern within a file.

Algo como:

- replace:
    path: /etc/keystone/keystone-paste.ini
    regexp: '^(pipeline = .*) admin_token_auth(.*)'
    replace: ''

Deve funcionar.

EDITAR:

Como isso não funcionou, eu usaria sed para isso e passaria para ansible com o módulo script .

Primeiro, um simples script sed que recebe o número da linha da sua tag e, em seguida, faz a alteração na linha após essa tag. Exemplo:

#!/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


PoC:

Exemplo de arquivo ( 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

Executando o script em 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

Como você pode ver, admin_token_auth foi removido da linha abaixo [pipeline:public_api] .

Agora, use o módulo de script para executar esse script nos hosts do seu inventário. EXCETO, é claro, com o -i flag passado para sed e o caminho e nome reais para o arquivo que você deseja alterar.

    
por 01.07.2017 / 19:12