It's vital to test new technology before rolling it out into your production environment. I like to use Python virtual environments provided by the venv
module for developing and testing Ansible playbooks and features. Instead of using the default Python and Ansible commands installed on your system, you can easily set up multiple Python environments and test different versions of Ansible and its component libraries.
Why use Python virtual environments for Ansible development?
Virtual environments are like a virtual machine or Linux chroot
, but they create an isolated structure of lightweight directories separated from actual Python system directories. That means you can have different sets of Python environments, each with different versions of modules, files, or configurations.
Ansible is based on Python and leverages many Python modules and plugins. When you test something new, it could require you to update a module that your Ansible installation depends on. Upgrading a component that your production environment depends on defeats the purpose of testing. Still, you can have different versions of Ansible and other important Python modules in a dedicated test directory with a virtual environment.
Get set up
I wrote this article for a Linux computer with Python 3.x. In this scenario, this is your Ansible development machine. First, verify the installed Python version and path:
# check Python version
$ python3 -V
Python 3.6.8
$ which python3
/usr/bin/python3
I recommend setting up a directory for the virtual environment:
$ mkdir python-venv
$ cd !$
You can skip this part if you want to keep it somewhere random, but I find it helpful to keep my consolidated test directories together.
Create a new Python virtual environment
Create a virtual environment using the python3 -m venv
command. You can give any name to your Python virtual environment. I want to try the Ansible 2.9
version, so I named it in a way to identify the directory easily:
$ python3 -m venv ansible2.9
$ ls
ansible2.9
[ Did you know Ansible Tower uses a Python virtual environment for executing tasks? Learn more in 5 tips for configuring virtualenvs with Ansible Tower. ]
Activate a Python virtual environment
After creating a virtual environment, you must enter the environment manually. This changes your active environment variables from your current shell to those required for Python to create a virtual environment:
$ source ansible2.9/bin/activate
(ansible2.9)$ python3 -V
Python 3.6.8
Next, upgrade the preferred installer program (pip
) inside your virtual environment:
(ansible2.9)$ python3 -m pip install --upgrade pip
Install Ansible in a virtual environment
With your virtual environment set up and active, you can install a dedicated version of Ansible into it. This example installs version 2.9, but you can install any version that's current (or in development):
(ansible2.9)$ python3 -m pip install ansible==2.9
(ansible2.9)$ which ansible
~/python-venv/ansible2.9/bin/ansible
Verify your new installation:
(ansible2.9)$ ansible --version
ansible 2.9.0
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/devops/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/devops/python-venv/ansible2.9/lib64/python3.6/site-packages/ansible
executable location = /home/devops/python-venv/ansible2.9/bin/ansible
python version = 3.6.8 (default, Aug 24 2020, 17:57:11) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
You can see that the Ansible version and path inside your Python virtual environment are different from your system installation.
[ Need more on Ansible? Take a free technical overview course from Red Hat. Ansible Essentials: Simplicity in Automation Technical Overview. ]
Test Python modules
You can now install any libraries or modules within your virtual environment without affecting the rest of your system:
(ansible2.9)$ python3 -m pip install dnspython
Collecting dnspython
Downloading dnspython-2.1.0-py3-none-any.whl (241 kB)
|████████████████████████████████| 241 kB 8.9 MB/s
Installing collected packages: dnspython
Successfully installed dnspython-2.1.0
(ansible2.9)$ python3 -m pip list
Package Version
------------ -------
ansible 2.9.0
cffi 1.14.6
cryptography 3.4.7
dnspython 2.1.0
Jinja2 3.0.1
MarkupSafe 2.0.1
pip 21.2.1
pycparser 2.20
PyYAML 5.4.1
setuptools 39.2.0
Install Ansible roles or collections
You can also install Ansible roles and collections into a Python virtual environment path for testing. For example, to test a specific Ansible Kubernetes.Core collection:
(ansible2.9)$ ansible-galaxy collection install \
kubernetes.core:==1.2.1 -p collections
Deactivate a Python virtual environment
Once you're finished working inside your Python virtual environment (or it's time to switch to another Python virtual environment), you can deactivate it:
(ansible2.9)$ deactivate
Create another Python virtual environment for Ansible 3.0
After deactivating the first virtual environment, try creating another Python virtual environment to understand the power this technology grants you. In this new environment, you can install Ansible 3.0 (or any version)—even if you have a different version installed on your system—and yet another version in a separate Python virtual environment:
$ python3 -m venv ansible3.0
$ ls -1
ansible2.9
ansible3.0
$ source ansible3.0/bin/activate
(ansible3.0)$ which python
~/python-venv/ansible3.0/bin/python
(ansible3.0)$ python3 -m pip install --upgrade pip
(ansible3.0)$ python3 -m pip install ansible==3.0
Wrap up
Python virtual environments give you the freedom to test whatever version of modules, plugins, and Python packages you need. That includes vital sysadmin software like Ansible, so you can test new Ansible features without disturbing your system install.
저자 소개
Gineesh Madapparambath is a Platform & DevOps Consultant at Red Hat Singapore, specializing in automation and containerization with Ansible and OpenShift.
He has worked as a Systems Engineer, Automation Specialist, and content author. His primary focus is on Ansible Automation, Containerization (OpenShift and Kubernetes), and Infrastructure as Code (Terraform). He is the author of the book "Ansible for Real-Life Automation".
채널별 검색
오토메이션
기술, 팀, 인프라를 위한 IT 자동화 최신 동향
인공지능
고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트
오픈 하이브리드 클라우드
하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요
보안
환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보
엣지 컴퓨팅
엣지에서의 운영을 단순화하는 플랫폼 업데이트
인프라
세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보
애플리케이션
복잡한 애플리케이션에 대한 솔루션 더 보기
오리지널 쇼
엔터프라이즈 기술 분야의 제작자와 리더가 전하는 흥미로운 스토리
제품
- Red Hat Enterprise Linux
- Red Hat OpenShift Enterprise
- Red Hat Ansible Automation Platform
- 클라우드 서비스
- 모든 제품 보기
툴
체험, 구매 & 영업
커뮤니케이션
Red Hat 소개
Red Hat은 Linux, 클라우드, 컨테이너, 쿠버네티스 등을 포함한 글로벌 엔터프라이즈 오픈소스 솔루션 공급업체입니다. Red Hat은 코어 데이터센터에서 네트워크 엣지에 이르기까지 다양한 플랫폼과 환경에서 기업의 업무 편의성을 높여 주는 강화된 기능의 솔루션을 제공합니다.