GNU/Linux >> Znalost Linux >  >> Linux

5 tipů pro konfiguraci virtuálních prostředí s Ansible Tower

Ansible běží na Pythonu a s Ansible Tower je Python také motorem pod kapotou. Při práci se svými zákazníky jsem viděl některé praktické otázky, které se zdají být relativně běžné. Tento článek poskytuje několik tipů pro nastavení a odstraňování problémů s virtualenv ve scénáři Ansible Tower.

1. Co je to virtualenv?

virtualenv jazyka Python je v podstatě adresář vytvořený pomocí virtualenv příkaz (což, jak můžete hádat, je skript Pythonu).

Jakmile je toto virtualenv „aktivováno“, můžete tam přidat konkrétní moduly Pythonu a mít izolované prostředí pro experimentování a vývoj, aniž by to ovlivnilo vaše hlavní skripty a příručky Python/Ansible.

Ansible Tower má ve výchozím adresáři dvě virtuální prostředí:awx a ansible .

První je: /var/lib/awx/venv/awx.  awx virtualenv je pro výhradní použití samotné Ansible Tower a neměl by být upravován .

Druhé virtualenv je: /var/lib/awx/venv/ansible . Toto virtualenv je to, co Tower používá ke spouštění šablon (playbooků).

Někdo by se mohl zeptat:Pokud potřebuji přidat moduly Pythonu vyžadované mými příručkami Ansible Tower, mám je přidat pod výchozí ansible virtualenv?

No, mohl bys.

Ale pravděpodobně je lepší vytvořit další virtualenv if:

  1. Chcete zachovat výchozí virtuální prostředí jako stabilní vývojové prostředí a chcete experimentovat s novými moduly v jiném virtuálním prostředí.
  2. Máte různé skupiny vývojářů, kteří pracují s různými projekty, které vyžadují specifické moduly Python/Ansible.

2. Tipy pro nastavení virtualenv

V dokumentaci Ansible Tower a Python jsou vynikající vysvětlení a příklady o tom, jak nastavit virtualenv.

Obvykle se při vytváření nového virtuálního prostředí řídím dokumentací Ansible Tower, ale jsou zde některá témata, která mám tendenci přehlížet (což později končí tím, že se poškrábu na hlavě a ptám se:„Hmm... proč to nefunguje tak, jak jsem očekával ?").

Oprávnění pro moduly Pythonu

Ujistěte se, že dodržujete doporučení nastavit umask 0022 , nejen když vytváříte vaše virtuální prostředí, ale také když přidáte moduly Pythonu.

Důvodem je, že Ansible Tower běží jako uživatel awx , takže tento uživatel musí umět číst moduly Pythonu ve virtualenv.

Pokud nejsou oprávnění nastavena správně, vaše šablony/playbooky vám mohou ukazovat chyby typu modul XYZ není nainstalován nebo modul XYZ nemá atribut ABC když je problém ve skutečnosti jednoduchý problém s oprávněním.

[ Čtenáři si také užili: Jak vytvořit Ansible Playbook ]

Nainstalujte Ansible do svého virtuálního prostředí

Příručky, které chcete spouštět pomocí virtualenv, budou potřebovat vaše specifické moduly Python nainstalované ve vašem virtualenv. Dává smysl, aby motor Ansible také běžel z tohoto virtuálního prostředí.

K instalaci konkrétní verze Ansible můžete použít následující příkaz:

sudo /opt/my-envs/xyz/bin/pip install ansible==2.9.15

Poznámka :Pokud neurčíte verzi, pip nainstaluje nejnovější verzi. Mezi Ansible 2.9 a Ansible 2.10 došlo ke změnám chování, takže je vhodné zkontrolovat tento dokument před povolením instalace 2.10 nebo novější verze.

K výpisu modulů Pythonu použijte Pip

Řekněme, že chcete vytvořit repliku svého virtualenv v jiném prostředí nebo máte více uzlů Ansible Tower a potřebujete replikovat virtualenv napříč všemi uzly. Chcete-li zachytit seznam modulů pro srovnání nebo dokumentaci, můžete použít:

pip list > pip_list.txt

head -5 /tmp/pip_list.txt
Package       Version
------------- ---------
ansible       2.9.15
certifi       2020.12.5
cffi          1.14.4

Můžete také vygenerovat seznam ve formátu, který umožňuje instalaci stejných verzí modulů někde jinde:

pip freeze > /tmp/pip_freeze.txt 

head -3 /tmp/pip_freeze.txt
ansible==2.9.15
certifi==2020.12.5
cffi==1.14.4

Tento zmrazený soubor pak můžete použít k instalaci stejných modulů s přesně stejnými verzemi pomocí:

sudo /opt/my-envs/xyz/bin/pip install -r pip_freeze.txt

3. Zpřístupněte virtualenv v projektech/šablonách Tower

Ve výchozím nastavení ví Ansible Tower pouze své vlastní virtuální prostředí.

Abyste Tower upozornili na další virtuální prostředí, máte dvě možnosti:

  1. Používejte volání REST API, jak je popsáno v dokumentaci Ansible Tower
  2. Použijte webové rozhraní a přejděte na NASTAVENÍ -> SYSTÉM :

Po provedení jednoho z těchto dvou kroků budete moci vybrat nová virtuální prostředí při práci s organizacemi, projekty a šablonami ve věži:

Poznámka :Ujistěte se, že je adresář virtualenv čitelný pro uživatele awx . Pokud tomu tak není, Tower neuvede virtuální prostředí

"Nejdůležitější věcí, které je třeba věnovat pozornost, je, které virtualenv je aktivní a které binární soubory používají vaše playbooky."

4. Zálohování a obnova virtualenv

Pokud provedete úplnou zálohu Tower (pomocí setup.sh -b skript), virtuální prostředí se tam automaticky zazálohují a budete je moci obnovit pomocí setup.sh -r ). Obnovení tímto způsobem samozřejmě znamená, že vše ostatní bude také obnoven.

Pokud potřebujete zálohovat/obnovit virtualenv, vždy můžete použít nástroje jako tar udělat to.

Také pokud jste uložili výstup vašeho pip freeze můžete znovu vytvořit strukturu adresářů a použít pip install pomocí -r argument, jak je uvedeno výše.

Zajistěte, aby byla obnovená adresářová struktura čitelná pro awx uživatel, aby věž mohla rozpoznat virtuální prostředí a uvést je pod ANSIBLE ENVIRONMENT pole Organizace, projekty a šablony.

Poznámka :Ve scénáři s Ansible Tower běžící na OpenShift jsou věci jiné, pokud jde o virtuální prostředí. To je téma na jiný článek.

5. Verze pro odstraňování problémů

Kterou verzi Pythonu používáte?

Jeden zdroj potenciálních problémů souvisí s přesnou použitou verzí Pythonu a Pipu nebo s verzí, kterou nástroje vidí .

Někdy potřebujete k instalaci/ověření modulů Pythonu použít příkazový řádek, takže je vždy dobré zkontrolovat, jakou verzi Pythonu používáte.

Například po aktivaci virtualenv zkontrolujte verzi:

source /opt/my-envs/xyz/bin/activate

(xyz) [admin@control my-envs]$ which python
/opt/my-envs/xyz/bin/python

(xyz) [admin@control my-envs]$ which python3
/opt/my-envs/xyz/bin/python3

(xyz) [admin@control my-envs]$ python -V
Python 3.6.8

(xyz) [admin@control my-envs]$ which pip
/opt/my-envs/xyz/bin/pip

(xyz) [admin@control my-envs]$ pip3 -V
pip 20.2.4 from /opt/my-envs/xyz/lib/python3.6/site-packages/pip (python 3.6)

Jak můžete vidět v příkladu výše, po aktivaci všechny příkazy ukazují na cesty v mém virtualenv, což byste měli očekávat, že uvidíte, pokud v cestě nemáte jiné verze, a to může způsobit nějaké problémy.

To je zvláště důležité, pokud děláte mít na svém serveru jiné verze Pythonu. Někdy můžete chtít spustit pip příkaz jako uživatel root a to, co root vidí jako výchozí Python, nemusí být to, co vidí váš účet bez oprávnění root. To by způsobilo, že by byl modul nainstalován ve špatném prostředí Pythonu a šablony, které spouštíte z Toweru, by modul nenašly.

Místo spuštění sudo pip install module-name , použijte úplnou cestu pro pip abyste se tomuto problému vyhnuli. Použije-li můj předchozí scénář jako příklad, bylo by to:

sudo /opt/my-envs/xyz/bin/pip install module-name

Kterou verzi Ansible používáte?

Pokud stále vidíte chyby jako Žádný modul s názvem XYZ , ve výstupu šablony zkontrolujte, kterou verzi Ansible používáte:

Odpovídá verzi/umístění, které máte ve svém virtuálním prostředí?

Nemusíte instalovat Ansible do svého virtualenv, ale mějte na paměti, že pokud jsou Ansible playbooky spouštěny jinou instancí Ansible, nemusí vidět moduly Pythonu nainstalované ve vašem virtualenv.

[ Bezplatný průvodce od společnosti Red Hat:5 kroků k automatizaci vašeho podnikání. ] 

Sbalit

Virtualenv jsou skvělý způsob, jak vytvořit izolované scénáře, kde můžete experimentovat s různými moduly Python/Ansible, aniž byste zasahovali do jiných nainstalovaných modulů. Virtualenv lze snadno znovu vytvořit od začátku. Nejdůležitější věcí, které je třeba věnovat pozornost, je, které virtualenv je aktivní a které binární soubory používají vaše playbooky.


Linux
  1. 8 tipů pro příkazový řádek Linuxu

  2. 5 tipů pro GNU Debugger

  3. Tipy a triky pro použití CUPS pro tisk s Linuxem

  1. 3 tipy pro tisk s Linuxem

  2. 6 dovedností pro odstraňování problémů pro Ansible playbooky

  3. 7 užitečných tipů pro vlastní hostování instance Ghost pomocí Dockeru

  1. 4 tipy, jak získat starší příbuzné online s Linuxem

  2. 5 tipů, jak začít se zabezpečením serveru Linux

  3. Začínáme se Sambou pro interoperabilitu