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