Porównaj ceny domen i usług IT, sprzedawców z całego świata

Jak ustawić zmienne środowiskowe Linuksa za pomocą Ansible


Cześć, próbuję dowiedzieć się, jak ustawić zmienną środowiskową za pomocą Ansible.
coś, co jest prostą komendą powłoki, taką jak ta:
EXPORT LC_ALL=C

próbował użyć polecenia powłoki i wystąpił błąd , próbował użyć modułu środowiskowego, ale nic się nie stało.
czego mi brakuje
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Można to zrobić na kilka sposobów, az Twojego pytania nie wynika jasno, czego potrzebujesz.

1. Jeśli potrzebujesz zdefiniować zmienną środowiskową tylko dla jednego zadania, zrób to

:

- hosts: dev
tasks:
- name: Echo my_env_var
shell: "echo $MY_ENV_VARIABLE"
environment:
MY_ENV_VARIABLE: whatever_value - name: Echo my_env_var again
shell: "echo $MY_ENV_VARIABLE"
Należy pamiętać, że
MY_ENV_VARIABLE
jest dostępny TYLKO dla pierwszego zadania,
environment
nie instaluje go na stałe w systemie.
TASK: [Echo my_env_var] ******************************************************* 
changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": "whatever_value"}TASK: [Echo my_env_var again] *************************************************
changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": ""}

Miejmy nadzieję, że
environment
wkrótce będzie dostępny pod adresem

poziom gry

a nie tylko na poziomie zadania, jak wspomniano powyżej.
Obecnie istnieje otwarte żądanie ściągnięcia dla tej funkcji w Ansible GitHub:

https://github.com/ansible/ansible/pull/8651
https://github.com/ansible/ansible/pull/8651
AKTUALIZACJA: została scalona od 2 stycznia 2015 r.

2. Jeśli potrzebujesz stałej zmiennej środowiskowej + dla całego systemu/tylko dla określonego użytkownika

Powinieneś przyjrzeć się, jak to robisz w swojej dystrybucji Linuksa/powłoki, jest na to kilka miejsc. Na przykład w Ubuntu definiuje się to w plikach takich jak:
  • ~/.profile
  • /etc/environment
  • Katalog
  • /etc/profile.d
  • ...

Dokumenty Ubuntu na ten temat znajdziesz tutaj:

https://help.ubuntu.com/commun ... ables
https://help.ubuntu.com/commun ... ables
W końcu, aby ustawić zmienną środowiskową na ex. Ubuntu możesz po prostu użyć modułu
lineinfile
firmy Ansible i dodać żądaną linię do określonego pliku. Zapoznaj się z dokumentacją systemu operacyjnego, gdzie można go dodać, aby był trwały.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie miałem wystarczającej reputacji, aby komentować, dlatego dodaję nową odpowiedź.

Odpowiedź Haseka jest całkowicie poprawna. Tylko jedno: jeśli zaktualizujesz plik
.bash_profile
lub
/ etc/profile
, zmiany te zostaną odzwierciedlone dopiero po ponownym zalogowaniu się.
Jeśli chcesz ustawić zmienną env, a następnie użyć jej w kolejnych zadaniach w tym samym samouczku, rozważ dodanie tych zmiennych środowiskowych do pliku
.bashrc
.

Myślę, że powodem tego jest logowanie i powłoki niezalogowane.

Ansible wykonuje różne zadania, odczytując parametry z pliku
.bashrc
zamiast
.bash_profile
lub
/ etc/profile
.



Na przykład, jeśli zaktualizowałem zmienną ścieżki, aby uwzględnić niestandardowy plik binarny w pliku
.bash_profile
odpowiedniego użytkownika, utworzyłem źródło tego pliku.
Następujące kolejne zadania nie rozpoznają mojego polecenia. Jeśli jednak zaktualizujesz plik
.bashrc
, polecenie zadziała.
- name: Adding the path in the bashrc files
lineinfile: dest=/root/.bashrc line='export PATH=$PATH:path-to-mysql/bin' insertafter='EOF' regexp='export PATH=\$PATH:path-to-mysql/bin' state=present

- - name: Source the bashrc file
shell: source/root/.bashrc - name: Start the mysql client
shell: mysql -e "show databases";


Zadziałało

by,

ale gdybym zrobił to z plikami profilu,
mysql -e "show databases"
zwróciłby błąd.

- name: Adding the path in the Profile files
lineinfile: dest=/root/.bash_profile line='export PATH=$PATH:{{install_path}}/{{mysql_folder_name}}/bin' insertafter='EOF' regexp='export PATH=\$PATH:{{install_path}}/{{mysql_folder_name}}/bin' state=present - name: Source the bash_profile file
shell: source/root/.bash_profile - name: Start the mysql client
shell: mysql -e "show databases";


To nie zadziała

,

jeśli mamy wszystkie te zadania w tym samym samouczku.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Oto szybkie zadanie lokalne, aby na stałe ustawić klucz/wartości na
/ etc/environment
(co dotyczy całego systemu i dotyczy wszystkich użytkowników):
- name: populate/etc/environment
lineinfile:
dest: "/etc/environment"
state: present
regexp: "^{{ item.key }}="
line: "{{ item.key }}={{ item.value}}"
with_items: "{{ os_environment }}"

i wojny o to:
os_environment:
- key: DJANGO_SETTINGS_MODULE
value : websec.prod_settings
- key: DJANGO_SUPER_USER
value : admin

i tak, jeśli wylogujesz się przez ssh i zalogujesz ponownie,
env
pokaże nowe zmienne środowiskowe.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Aby trwale skonfigurować zmienne środowiskowe, możesz użyć jednej z istniejących ról w Ansible Galaxy. polecam

weareinteractive.environment
https://galaxy.ansible.com/wea ... nment
.
Korzystanie z ansible-galaxy:
$ ansible-galaxy install weareinteractive.environment

Korzystanie z Requirements.yml:
- src: franklinkim.environment

Następnie w swoim schemacie:
- hosts: all
sudo: yes
roles:
- role: franklinkim.environment
environment_config:
NODE_ENV: staging
DATABASE_NAME: staging
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To najlepsza opcja. Jak powiedział Michał Hasek (pierwsza odpowiedź), ponieważ żądanie ściągnięcia zostało scalone (

https://github.com/ansible/ansible/pull/8651
https://github.com/ansible/ansible/pull/8651
),
możemy łatwo zainstalować

trwałe zmienne środowiskowe

według poziomu odtwarzania.
- hosts: all
roles:
- php
- nginx
environment:
MY_ENV_VARIABLE: whatever_value

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się