znacznik blokowania ansible blockinfile

11

Jestem nowy w ansible, ale udało mi się z powodzeniem korzystać z funkcji blokowania plików . Nie mogę jednak wymyślić, jak zapobiec wstawianiu markerów. Przeczytałem dokumentację, ale nie wydaje się, żeby ją opisywała.

To właśnie pojawia się w każdym pliku, do którego zapisuje blockinfile.

# BEGIN ANSIBLE MANAGED BLOCK
# END ANSIBLE MANAGED BLOCK
Nik
źródło

Odpowiedzi:

14

Rzuciłem okiem na oryginalny blockinfilemoduł na githubie - przed Ansible 2 nie był dołączony do Ansible. Okazuje się, że markery są faktycznie używane do identyfikacji bloku :

To wydaje się zamierzone zachowanie. Zastępuje wszystkie wiersze otoczone znacznikami bloków określoną treścią.

Oznacza to, że jeśli usuniesz znaczniki, blockinfilenie będzie już w stanie zidentyfikować bloku, co spowoduje, że moduł będzie dodawał blok do pliku przy każdym uruchomieniu playbooka.

Tak więc znaczniki przed i po zapisanym bloku są wymaganiem modułu i nie można ich usunąć.

Jeśli jest to jednorazowy podręcznik, który nigdy więcej nie zostanie wykonany, możesz później uruchomić lineinfilemoduł z state: absentopcją.


Stara odpowiedź:

Według dokumentacji blockinfilemoduł ma markeropcję.

Czy próbowałeś ustawić go na pusty ciąg lub False?

blockinfile:
    dest: /var/www/html/index.html
    marker: ""

lub

blockinfile:
    dest: /var/www/html/index.html
    marker: False
udondan
źródło
1
Przepraszam za niekompletne oświadczenie powyżej, ktoś zapukał do drzwi i musiałem biec. Próbowałem wczoraj tych pomysłów. marker: "" - Dodaje linię na górze i na dole pliku. Fałsz: - Po prostu dodaje słowo fałsz na dole i na górze pliku. Jakieś inne pomysły?
Nik
2
Zaktualizowałem swoją odpowiedź. Znaczniki są faktycznie wymagane przez sam moduł gthe i nawet jeśli możesz, prawdopodobnie nie chcesz ich usuwać. Zobacz zaktualizowaną odpowiedź, aby uzyskać szczegółowe informacje.
udondan
0

zrobiłem coś takiego ...

- name: Insert someline in somefile.sh
    blockinfile:
      path: /usr/share/somefile.sh
      block: -sometext
      insertafter: '-XX:originaltext'
      marker: ""
      backup: yes


 - name: Remove blank lines blockinfile put in
    lineinfile :
     path: /usr/share/somefile.sh
     state: absent
     regexp: '^$'
  • znacznik „” wstawi puste linie do pliku
  • lineinfile usunie je (wraz ze wszystkimi innymi pustymi liniami) więc uważaj !!
użytkownik489843
źródło