GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit proměnné prostředí Linuxu pomocí Ansible

Toto je nejlepší možnost. Jak řekl Michal Gasek (první odpověď), od sloučení požadavku na stažení (https://github.com/ansible/ansible/pull/8651) jsme schopni nastavit trvalé proměnné prostředí snadno podle úrovně hry.

- hosts: all
  roles:
     - php
     - nginx
  environment:
    MY_ENV_VARIABLE: whatever_value

Existuje několik způsobů, jak to udělat, a z vaší otázky není jasné, co potřebujete.

1. Pokud potřebujete, aby byla proměnná prostředí definována POUZE NA ÚLOHU, postupujte takto:

- 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"

Všimněte si, že MY_ENV_VARIABLE je k dispozici POUZE pro první úlohu, environment nenastaví ji natrvalo ve vašem systému.

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": ""}

Doufejme, že brzy použijeme environment bude také možné na úrovni hry , nejen na úrovni úkolu, jak je uvedeno výše. V současné době je na GitHubu Ansible otevřen požadavek na stažení této funkce:https://github.com/ansible/ansible/pull/8651

AKTUALIZACE:Nyní je sloučena od 2. ledna 2015.

2. Pokud chcete trvalé proměnné prostředí + celý systém / pouze pro určitého uživatele

Měli byste se podívat na to, jak to děláte ve vaší distribuci Linuxu / shellu, existuje pro to několik míst. Například v Ubuntu to definujete v souborech jako například:

  • ~/.profile
  • /etc/environment
  • /etc/profile.d adresář
  • ...

Dokumenty Ubuntu o tom najdete zde:https://help.ubuntu.com/community/EnvironmentVariables

Koneckonců pro nastavení proměnné prostředí v ex. Ubuntu stačí použít lineinfile modul z Ansible a přidejte požadovaný řádek do určitého souboru. Chcete-li vědět, kam ji přidat, aby byla trvalá, poraďte se se svou dokumentací operačního systému.


Zde je rychlý místní úkol k trvalému nastavení párů klíč/hodnota na /etc/environment (což platí pro celý systém, všichni uživatelé):

- name: populate /etc/environment
  lineinfile:


    path: "/etc/environment"

    state: present
    regexp: "^{{ item.key }}="
    line: "{{ item.key }}={{ item.value}}"
  with_items: "{{ os_environment }}"

a jeho varianty:

os_environment:
  - key: DJANGO_SETTINGS_MODULE 
    value : websec.prod_settings  
  - key: DJANGO_SUPER_USER 
    value : admin

a ano, pokud se ssh odhlásíte a znovu se přihlásíte, env ukazuje nové proměnné prostředí.

p.s. Dříve to bylo dest jako v:

    dest: "/etc/environment"

ale viz komentář

Pouze pro tento úkol:vkládání funguje, někdy .

——————-

Poznámka:níže uvedené věci jsou spíše pozorováním/experimentem než doporučením.——————-

První úkol je ekvivalentem Michaelovy odpovědi s nejvyšším hlasem.

Druhý nefunguje, ale pak znovu foo=1 echo $foo nefunguje ani v bash (domnívám se, že je to proto, že echo je vestavěný).

Třetí funguje , stejně jako v bash, a vyžaduje velmi málo úsilí. Nicméně... když jsem se o to pokusil nastavit proměnnou uzlu, selhalo to, dokud jsem nepoužil Michaelovu odpověď.

  tasks:
    - name: Echo my_env_var
      shell: "echo $MY_ENV_VARIABLE"
      environment:
        MY_ENV_VARIABLE: value1  

    - name: Echo my_env_var inline, doesnt work in bash either
      shell: "MY_ENV_VARIABLE=value2 echo $MY_ENV_VARIABLE"

    - name: set my_env_var inline then env
      shell: "MY_ENV_VARIABLE=value3 env | egrep MY_ENV"


výstup:

TASK [Echo my_env_var] *********************************************************
changed: [192.168.63.253] => changed=true 
  cmd: echo $MY_ENV_VARIABLE
  stdout: value1

TASK [Echo my_env_var inline, doesnt work in bash either] **********************
changed: [192.168.63.253] => changed=true 
  cmd: MY_ENV_VARIABLE=value2 echo $MY_ENV_VARIABLE
  stdout: ''

TASK [set my_env_var inline then env] ******************************************
changed: [192.168.63.253] => changed=true 
  cmd: MY_ENV_VARIABLE=value3 env | egrep MY_ENV
  stdout: MY_ENV_VARIABLE=value3

Neměl jsem dostatečnou pověst, abych se vyjádřil, a proto přidávám novou odpověď.
Gasek odpověď je zcela správná. Jen jedna věc:pokud aktualizujete .bash_profile soubor nebo /etc/profile , tyto změny se projeví až po novém přihlášení. V případě, že chcete nastavit proměnnou env a poté ji použít v následujících úlohách ve stejné příručce, zvažte přidání těchto proměnných prostředí do .bashrc soubor.
Myslím, že důvodem je přihlašovací a nepřihlašovací shelly.
Ansible při provádění různých úloh čte parametry z .bashrc namísto .bash_profile nebo /etc/profile .

Pokud jsem například aktualizoval svou proměnnou cesty tak, aby zahrnovala vlastní binární soubor v .bash_profile souboru příslušného uživatele a poté provedl zdroj souboru. Další následné úkoly můj příkaz nerozpoznají. Pokud však aktualizujete v .bashrc soubor, příkaz by fungoval.

 - 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";

To by fungovalo , ale kdybych to udělal pomocí souborů profilu mysql -e "show databases" by došlo k chybě.

- 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";

Tohle nebude fungovat , pokud máme všechny tyto úkoly ve stejné příručce.


Linux
  1. Jak používat Ansible k nastavení monitorování systému pomocí Prometheus

  2. Jak nastavit a zrušit místní, uživatelské a systémové proměnné prostředí v Linuxu

  3. Jak vytisknout zjevně skryté proměnné prostředí?

  1. Proměnné prostředí Linux:Jak číst a nastavovat na Linux VPS

  2. Jak nastavit/vytvořit proměnné prostředí a prostředí v Linuxu

  3. Příklady exportních příkazů pro Linux (jak nastavit proměnné prostředí)

  1. Jak nastavit, vypsat a odebrat proměnné prostředí v Linuxu

  2. Proměnné uživatelského prostředí S „su“ a „sudo“ v Linuxu

  3. Nastavit proměnnou prostředí s prostorem v Linuxu