Ansible Lineinfile Module With Regexp Examples
Ansible lineinfile module jest używany do wstawiania nowych linii na końcu pliku lub w dowolnym miejscu w pliku. Dzięki modułowi ansible lineinfile możemy usunąć istniejące linie z pliku i możemy je zastąpić. W poniższych przykładach pokażę, jak używać modułu ansible lineinfile z różnymi parametrami, takimi jak regexpto do wstawiania nowych linii.
Utwórz nowy plik i dodaj linię:
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible lineinfile mdoule. lineinfile: path: /project/devops/abc.txt line: decodingdevops talks about all the devops tools state: present create: yes
W module lineinfile możemy używać różnych parametrów w zależności od naszych wymagań. Tutaj użyłem parametru 'path’, parametr path mówi lineinfile do którego pliku ma modyfikować Więc w parametrze path powinniśmy podać ścieżkę do pliku, który zamierzamy modyfikować. W parametrze line musimy dodać linię, która zostanie dodana do pliku. Aby dodać linię do pliku, powinniśmy wspomnieć parametr state jako obecny. Create parametr z yes, używamy do tworzenia pliku, jeśli plik nie istnieje.
co robi ten playbook
utworzy nowy plik i doda linię do pliku. Jeśli uruchomisz playbook ponownie, żadne zmiany nie zajdą w tym pliku, ponieważ lineinfile doda linię, jeśli ta linia nie istnieje. Jeśli linia już istnieje to nie doda tej linii ponownie.
jeśli usunąłeś parametr create i jeśli uruchomisz playbook. Musisz mieć plik istnieje w określonej ścieżce inaczej będzie przez ciebie błąd jak
fatal: : FAILED! => {„changed”: false, „msg”: „Destination /project/devops/abc.txt does not exist !”, „rc”: 257}
If The File is Already Existed:
jeśli plik już istnieje to będzie on dołączony do końca pliku.
Ansible Lineinfile With Regexp Przykład:
---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' line: 'hello devops' state: present backrefs: yes
Regexp jest używany do modyfikacji konkretnej linii w pliku. Tutaj wspomnieliśmy w parametrze regexp jako '^devops’. oznacza to, że linia rozpoczęta z docker ma być zmodyfikowana z linią 'hello devops’ w pliku. powinniśmy wspomnieć o backrefs jako yes. Backrefs yes zastąpi linię linią 'hello devops’ tylko jeśli jest to linia regexp find (^docker) w pliku. Jeśli nie ma linii zaczynającej się od docker to nie zmieni nic w pliku, plik pozostanie bez zmian.
Domyślnie wartość backrefs to nie, więc jeśli nie wspomniałeś o backrefs w zadaniu, przyjmie ono wartość 'backref: no’
Co się stanie, jeśli nie wspomniałeś o backrefs: lub
jeśli nie wspomniałeś o backrefs jako tak, i jeśli nie ma linii rozpoczętej z docker, linia zostanie dodana na końcu pliku. Jeśli uruchomisz playbook wiele razy, linia zostanie dodana tyle razy. Aby uniknąć tego problemu powinieneś wspomnieć backref jako yes.
Dodaj linię po/przed daną linią:
Jeśli chcesz dodać linię po/przed konkretną linią, możesz użyć parametru insertafter/insertbefore w module ansible lineinfile.
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'
Tutaj doda linię 'hello devops’ po linii rozpoczętej z docker.
Jeśli chcesz dodać linię przed rozpoczęciem linii rozpoczętej z docker, możesz wstawić insertbefore.
Usuń linię za pomocą Ansible regexp
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' state: absent
Tutaj usunie linię rozpoczętą z docker. Aby usunąć linię za pomocą regexp w ansible powinniśmy użyć parametru state jako absent.
W powyższych przykładach dyskutowaliśmy o linii rozpoczętej od, ponieważ wspomniałem o symbolu(^). Ten symbol reprezentuje 'linię zaczynającą się od’, jeśli chcesz poznać więcej różnych opcji powinieneś nauczyć się python regexp.
https://docs.python.org/2/library/re.html
.
Leave a Reply