Cześć, próbuję dowiedzieć się, jak ustawić zmienną środowiskową za pomocą Ansible.
coś, co proste polecenie powłoki, takie jak:
EXPORT LC_ALL=C
próbowano jako polecenie powłoki i otrzymałem błąd. Próbowano użyć modułu środowiska i nic się nie stało.
czego mi brakuje
Odpowiedzi:
Można to zrobić na wiele sposobów, az Twojego pytania nie wynika, czego potrzebujesz.
1. Jeśli potrzebujesz zdefiniować zmienną środowiskową TYLKO DLA ZADANIA, wykonaj następujące czynności:
Zauważ, że
MY_ENV_VARIABLE
jest dostępne TYLKO dla pierwszego zadania,environment
nie ustawia go na stałe w systemie.Miejmy nadzieję, że wkrótce korzystanie z niego
environment
będzie również możliwe na poziomie gry , a nie tylko na poziomie zadań, jak powyżej. Obecnie otwarte jest żądanie ściągnięcia tej funkcji w serwisie GitHub firmy Ansible: https://github.com/ansible/ansible/pull/8651AKTUALIZACJA: teraz została scalona od 2 stycznia 2015 r.
2. Jeśli chcesz mieć stałą zmienną środowiskową + systemową / tylko dla określonego użytkownika
Powinieneś przyjrzeć się, jak to robisz w swojej dystrybucji / powłoce Linuksa, jest na to wiele miejsc. Na przykład w Ubuntu definiujesz to w plikach takich jak na przykład:
~/.profile
/etc/environment
/etc/profile.d
informatorDokumentację Ubuntu na ten temat znajdziesz tutaj: https://help.ubuntu.com/community/EnvironmentVariables
W końcu do ustawienia zmiennej środowiskowej w ex. Ubuntu możesz po prostu użyć
lineinfile
modułu Ansible i dodać żądaną linię do określonego pliku. Skonsultuj się z dokumentacją systemu operacyjnego, aby dowiedzieć się, gdzie go dodać, aby był trwały.źródło
Nie miałem wystarczającej reputacji, aby komentować, dlatego dodaję nową odpowiedź.
Odpowiedź Gaska jest całkiem poprawna. Tylko jedno: jeśli aktualizujesz
.bash_profile
plik lub plik/etc/profile
, te zmiany zostaną odzwierciedlone dopiero po ponownym zalogowaniu. Jeśli chcesz ustawić zmienną env, a następnie użyć jej w kolejnych zadaniach w tym samym playbooku, rozważ dodanie tych zmiennych środowiskowych do.bashrc
pliku.Myślę, że powodem tego jest logowanie i powłoki niezalogowane.
Ansible, wykonując różne zadania, odczytuje parametry z
.bashrc
pliku zamiast.bash_profile
lub/etc/profile
.Na przykład, jeśli zaktualizowałem zmienną ścieżki, aby uwzględnić niestandardowy plik binarny w
.bash_profile
pliku odpowiedniego użytkownika, a następnie utworzyłem źródło pliku. Następne kolejne zadania nie rozpoznają mojego polecenia. Jeśli jednak zaktualizujesz.bashrc
plik, polecenie zadziała.To zadziałałoby , ale gdybym to zrobił przy użyciu plików profili,
mysql -e "show databases"
dałoby to błąd.Ten nie zadziała , jeśli mamy wszystkie te zadania w tym samym podręczniku.
źródło
source file
robić. file
Oto szybkie zadanie lokalne, w którym można na stałe ustawić pary klucz / wartości
/etc/environment
(obejmujące cały system i wszystkich użytkowników):i vars dla niego:
i tak, jeśli wyjdziesz i z powrotem ssh,
env
pokazuje nowe zmienne środowiskowe.źródło
dest
został zastąpionypath
, ale zgodnie z dokumentacją powinien nadal działać. Jeśli tak nie jest, przełącz się napath
.Aby trwale ustawiać zmienne środowiskowe, możesz użyć jednej z istniejących ról w Ansible Galaxy. Polecam myareinteractive.environment .
Korzystanie z ansible-galaxy:
Korzystanie z Requirements.yml:
Następnie w swoim poradniku:
źródło
To najlepsza opcja. Jak powiedział Michał Gasek (pierwsza odpowiedź), ponieważ żądanie ściągnięcia zostało scalone ( https://github.com/ansible/ansible/pull/8651 ), jesteśmy w stanie łatwo ustawić stałe zmienne środowiskowe według poziomu gry.
źródło