Wpis z mikrobloga

@MUDAMUDAMUDA: @Czeggu: @maniac777: @chwiejus:

Co tam?


Wymyśliłem sobie, że żeby ogarnąć lepiej ansible będę rozwiązywał wymyślone przez siebie problemy, które rozwiązywałem w bashu lub w pythonie.

Trafiłem na coś co nie do końca wiem jak ogarnąć. Mógłbym prosić o jakieś naprowadzenie? Chciałbym się dowiedzieć czy w ansible da się ogarnąć jakoś podejmowanie decyzji na podstawie kilku czynników? Czy może lepiej to zrobić jakoś z zewnątrz np dopisać moduł
1. Pętle zagnieżdżone (ansible obsługuje je tylko przez includetasks) i testowanie każdego osobno.

2. Pętla + filtr jsonquery:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html


@maniac777: Możesz napisać coś więcej o pętlach zagnieżdżonych?

W przypadku drugiego nie bardzo wiem jak to połączyć wszystko w całość by wywalać kolejne rzeczy z listy.

@devopsiarz:

when cechaA == ”costam” && inventory_hostname == ”ip”


No właśnie ta opcja jest bardzo słaba bo te pojedyncze warunekki będą się ciągnąły w
@devopsiarz: I w sumie jeszcze jedno pytanie. Jak np wybrać hosta o największej określonej cesze np ze wszystkich hostów oprócz pożywszych warunków to wybrać dynamicznie jeszcze takiego, który ma największą cechaA i cechaB? Prostymi warunkami się tego nie zrobi ( ͡° ʖ̯ ͡°)
@devopsiarz: && już działa w when? ja nadal mam słowne zapisy wszędzie na 2.7 i przymierzam się na 2.8 migrować
@Kryspin013: Pracuję z ansible od kilku lat i chodzi Ci o grupowanie i mergowanie hostów ? https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
Odnośnie powtarzania się filtra to możesz go wrzucić w playbooku już przy wczytywaniu ról, czyli jak masz role to dopisujesz to tak:

roles:
- { role: zrob_a, when: ... }
- { role:
Pracuję z ansible od kilku lat i chodzi Ci o grupowanie i mergowanie hostów ?


@ManamanaTuriruriru: Nie, to że tu występują hosty to tylko przykład. Chciałbym wiedzieć jak przetwarzać lub jak podejmować decyzje ansiblem biorąc pod uwagę skomplikowaną strukturę danych na wejściu.

i łatwiej to szybko naklepać w python3 i podawać wszystko jako parametry do ansible-playbook.


No właśnie tak bym zrobił ale nie do filtrowania hostów tylko filtrowania danych.
@Kryspin013: ogólnie ansible przyjmuje warunki i formatowanie z python jinja 2. Jeśli masz serio zaawansowany system wyboru/filtrowania to masz także taki wybór:
- napisać executor do swoich ansible, który będzie podawał przetworzone dane jako --extra-vars - rozwiązanie bardziej uniwersalne ale za razem być może nie konieczne w Twoim projekcie
- napisać moduł do ansible, który może zawierać kod pythona i po prostu zrobić set_fact dla danych, które potrzebujesz a wszystko liczyć
- napisać moduł do ansible, który może zawierać kod pythona i po prostu zrobić set_fact dla danych, które potrzebujesz a wszystko liczyć w module.


@ManamanaTuriruriru: Już pisałem własny moduł więc spoko.

- napisać executor do swoich ansible, który będzie podawał przetworzone dane jako --extra-vars - rozwiązanie bardziej uniwersalne ale za razem być może nie konieczne w Twoim projekcie


Ale wtedy to nie zadziała jakbym to chciał spiąć z awx. Wolałbym coś
@Kryspin013: Wiesz ciężko narzucić Ci najlepsze rozwiązanie nie widząc use-case. Tak, masz też filtry i pluginy. Z AWX/Semaphore takie rozwiązanie nie pójdzie, chyba że byś ten executor wywoływał przez connect to localhost z podawaniem parametrów ale to już kombinacja zbędna.
@Kryspin013: jak chcesz jak najprościej to masz jeszcze możliwość zrobienia tego w dowolnym języku, wywołaniu przez shell i zarejestrowaniu stdout i użyciu go. Albo możesz jak wspominałem przez set_fact zrobić wszystko w jednej roli i użyć w kolejnych. Ciężko mi powiedzieć co ja bym zrobił jak nie widze tego :)
wywołaniu przez shell i zarejestrowaniu stdout


@ManamanaTuriruriru: Głupie, podchodzi to pod złe praktyki.

Ciężko mi powiedzieć co ja bym zrobił jak nie widze tego :)


Napisałem już moduł, który ładnie wszystko przetwarza. Jak zacząłem konstruować logikę to ogarnąłem jak bardzo nie da się tego zrobić bezpośrednio w ansible w yamlu xD