Dostosowuję users
tworzenie Linuksa w ramach mojej roli. Muszę pozwolić użytkownikom moja rola Dostosuj home_directory
, group_name
, name
, password
.
Zastanawiałem się, czy istnieje bardziej elastyczny sposób radzenia sobie z wartościami domyślnymi.
Wiem, że poniższy kod jest możliwy:
- name: Create default
user:
name: "default_name"
when: my_variable is not defined
- name: Create custom
user:
name: "{{my_variable}}"
when: my_variable is defined
Ale jak wspomniałem, istnieje wiele opcjonalnych zmiennych, a to stwarza wiele możliwości.
Czy jest coś takiego jak powyższy kod?
user:
name: "default_name", "{{my_variable}}"
Kod powinien być ustawiony, name="default_name"
gdy my_variable
nie jest zdefiniowany.
Mógłbym włączyć wszystkie zmienne defaults/main.yml
i stworzyć takiego użytkownika:
- name: Create user
user:
name: "{{my_variable}}"
Ale te zmienne znajdują się w naprawdę dużym skrócie, a wewnątrz tego skrótu jest kilka skrótów, które nie mogą być wartością domyślną.
ansible
ansible-2.x
Bernardo Vale
źródło
źródło
Odpowiedzi:
Możesz użyć Jinja
default
:źródło
default('/home/' {{ anothervar }})
, czy istnieje sposób na konkatenację tych wartości?default_value
i użyje zmiennej o nazwie default_value{{ dict.key | default(5) }}
. Nie powiedzie się, jeślidict
jest niezdefiniowane.[WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
Niezupełnie powiązane, ale możesz również sprawdzić obie zmienne
undefined
ORAZempty
(np.my_variable:
). (UWAGA: działa tylko z wersją ansible> 1.9, patrz: link )źródło
Jeśli ktoś szuka opcji, która obsługuje zagnieżdżone zmienne, w tym wydaniu na githubie jest kilka takich opcji .
Krótko mówiąc, musisz użyć „domyślnego” filtru dla każdego poziomu zagnieżdżonych zmiennych. Dla zmiennej „a.nested.var” wyglądałoby to następująco:
lub możesz ustawić domyślne wartości pustych dykt dla każdego poziomu zmiennych, być może używając filtru „połącz”. Lub użyj filtru „json_query”. Ale opcja, którą wybrałem, wydaje mi się prostsza, jeśli masz tylko jeden poziom zagnieżdżenia.
źródło
Jeśli masz pojedyncze odtworzenie, które chcesz zapętlić nad elementami, zdefiniuj tę listę w group_vars / all lub w innym miejscu, które ma sens:
Wtedy Twoje zadanie może wyglądać następująco:
Przekaż varlistę jako tablicę JSON:
Wcześniej możesz również potrzebować zadania, które sprawdza, czy każdy element w varlist znajduje się również w all_items :
źródło
Jeśli używasz wyszukiwania do ustawienia domyślnego odczytu ze środowiska, ustaw również drugi parametr default na true:
Możesz także połączyć wiele domyślnych definicji:
źródło
Pytanie jest dość stare, ale co z:
Wydaje mi się to mniej kłopotliwe ...
źródło
Jeśli przypisujesz wartość domyślną dla faktów logicznych, upewnij się, że wewnątrz default () nie są używane cudzysłowy.
W przypadku innych zmiennych zastosowano tę samą metodę podaną w zweryfikowanej odpowiedzi.
źródło