zaki work log

作業ログやら生活ログやらなんやら

Ansibleの呼吸 肆ノ型 フィルター芸「0,1反転」 ワンライナー編

元ネタです qiita.com

別解編

tekunabe.hatenablog.jp

qiita.com

ということで、私も試してみました。
フィルター + ansibleアドホックコマンドでワンライナー

$ cat before_number.txt 
001010101010101010010101
111000101010100111010011
100001010100001010101010
110101010101010010101010
101010100101010101010000
111111100000111010000000
$ ansible localhost -m copy -a "dest=after_number.txt content={{ lookup('file', 'before_number.txt') | replace('0', '_') | replace('1', '0') | replace('_', '1')}}{{'\n'}}"
localhost | CHANGED => {
    "changed": true, 
    "checksum": "39ba8f9887f06100e23a499bed1603bb3731ad05", 
    "dest": "./after_number.txt", 
    "gid": 1000, 
    "group": "zaki", 
    "md5sum": "78964bbf4925ebd8a66cd4abbf5c14b8", 
    "mode": "0664", 
    "owner": "zaki", 
    "secontext": "unconfined_u:object_r:user_home_t:s0", 
    "size": 150, 
    "src": "/home/zaki/.ansible/tmp/ansible-tmp-1576710586.73-146675830149952/source", 
    "state": "file", 
    "uid": 1000
}
$ cat after_number.txt 
110101010101010101101010
000111010101011000101100
011110101011110101010101
001010101010101101010101
010101011010101010101111
000000011111000101111111

うまくいってるかな?

regex_replaceで結果をintにして'+1 %2'とかすればいけると思ったけど、'\1'の扱いが難しく、結局replaceフィルターになりました。
あと最後の{{'\n'}}がないと、改行が消えてしまうので苦肉の策。

詳しく調べたいけど電車の時間が…笑