DevOps automation is the practice of automating the process of building, testing, and deploying software. Python is a popular language for DevOps automation because of its simplicity and versatility. In this article, we will cover the basics of getting started with DevOps automation using Python.
Prerequisites
Before we begin, make sure you have Python installed on your system. You can download Python from the official website at https://www.python.org/downloads/. We will also be using some Python packages, so make sure you have the following packages installed:
pip: The package installer for Python.
virtualenv: A tool that creates isolated Python environments.
Setting up a Virtual Environment
The first step in getting started with Python DevOps automation is to set up a virtual environment. A virtual environment allows you to create a separate environment for your Python project, which can help avoid conflicts with other packages on your system.
To create a virtual environment, open a terminal or command prompt and navigate to the directory where you want to create your project. Then, run the following commands:
python3 -m venv myproject
source myproject/bin/activate
This will create a new virtual environment called myproject and activate it.
Installing Packages
Now that we have our virtual environment set up, we can install the packages we need for our project. In this example, we will install the requests package, which allows us to send HTTP requests from our Python code. To install the package, run the following command:
pip install requests
Writing a Simple Script
With our virtual environment and packages set up, we can now write a simple Python script to automate a task. In this example, we will write a script that sends an HTTP GET request to a website and prints the response.
Create a new file called get_request.py and add the following code:
import requests
url = 'https://www.example.com'
response = requests.get(url)
print(response.text)
Save the file and run it with the following command:
python get_request.py
This will send an HTTP GET request to https://www.example.com and print the response.
How to use Python for configuration management with Ansible
Ansible is an open-source configuration management tool that allows you to automate the provisioning, configuration, and deployment of servers and applications. Python is the language that Ansible is built upon, making it a natural choice for writing Ansible modules and playbooks. In this article, we will cover how to use Python for configuration management with Ansible.
Prerequisites
Before we begin, make sure you have Ansible installed on your system. You can install Ansible using pip:
pip install ansible
Ansible Modules
Ansible modules are reusable pieces of code that can be used to perform specific tasks, such as installing a package or configuring a service. Ansible comes with many built-in modules, but you can also create your own custom modules using Python.
To create a custom module, you need to create a Python file with a function that performs the task you want. The function should take parameters as input and return a JSON object as output. Here is an example of a custom module that installs a package using apt:
import subprocess
import json
def install_package(package_name):
result = {}
cmd = ['apt-get', 'install', '-y', package_name]
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
result['msg'] = 'Package installed successfully'
result['output'] = output.decode('utf-8')
return json.dumps(result)
Save this file as install_package.py in the directory where you want to run your Ansible playbook.
Ansible Playbooks
An Ansible playbook is a YAML file that defines a set of tasks to be executed on a set of hosts. Each task is defined as a module with parameters that define how the task should be performed. In the playbook, you can use the custom Python module we created earlier.
Here is an example of a playbook that installs a package using our custom module:
---
- name: Install package
hosts: all
become: true
tasks:
- name: Install package
module: install_package
args:
package_name: nginx
Save this file as install_package.yml in the same directory as your custom Python module.
To run the playbook, use the following command:
ansible-playbook install_package.yml
This will run the playbook on all hosts defined in your Ansible inventory file.
Writing CI/CD pipelines with Python scripts and Jenkins
Jenkins is a popular open-source automation server that can be used to implement continuous integration and continuous delivery (CI/CD) pipelines. Python is a versatile language that can be used to write scripts to automate various tasks in the CI/CD pipeline. In this article, we will cover how to write CI/CD pipelines with Python scripts and Jenkins.
Prerequisites
Before we begin, make sure you have Jenkins installed on your system. You can download Jenkins from the official website at https://www.jenkins.io/download/. We will also be using some Python packages, so make sure you have the following packages installed:
pip: The package installer for Python.
virtualenv: A tool that creates isolated Python environments.
Setting up a Virtual Environment
The first step in writing CI/CD pipelines with Python scripts and Jenkins is to set up a virtual environment. A virtual environment allows you to create a separate environment for your Python project, which can help avoid conflicts with other packages on your system.
To create a virtual environment, open a terminal or command prompt and navigate to the directory where you want to create your project. Then, run the following commands:
python3 -m venv myproject
source myproject/bin/activate
This will create a new virtual environment called myproject and activate it.
Installing Packages
Now that we have our virtual environment set up, we can install the packages we need for our project. In this example, we will install the pytest package, which allows us to write and run tests in Python. To install the package, run the following command:
pip install pytest
Writing Python Scripts
With our virtual environment and packages set up, we can now write Python scripts to automate tasks in the CI/CD pipeline. In this example, we will write a script that runs tests using pytest.
Create a new file called test.py and add the following code:
import pytest
def test_example():
assert 1 + 1 == 2
Save the file and run it with the following command:
pytest test.py
This will run the test and print the results.
Configuring Jenkins
Now that we have our Python script, we can configure Jenkins to run it as part of a CI/CD pipeline.
- Open Jenkins in your web browser and click on "New Item" to create a new project.
- Enter a name for your project and select "Freestyle project" as the project type.
- In the "Source Code Management" section, select your version control system and enter the repository URL.
- In the "Build" section, click on "Add build step" and select "Execute shell".
- In the "Command" field, enter the following command:
source /path/to/venv/bin/activate && pytest /path/to/test.py
- Click on "Save" to save your project configuration.
pip install psutil
import psutil
# Get CPU usage
cpu_percent = psutil.cpu_percent()
# Get memory usage
memory = psutil.virtual_memory()
memory_percent = memory.percent
import logging
logger = logging.getLogger(__name__)
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.info('This is a log message')
2022-03-05 15:34:55,123 - __main__ - INFO - This is a log message
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
terraform init
pip install python-terraform
import terraform
tf = terraform.Terraform(working_dir='./terraform')
tf.init()
tf.apply()
output = tf.output('public_ip')
print(output)
buckets = ['bucket1', 'bucket2', 'bucket3']
tf_code = """
provider "aws" {
region = "us-west-2"
}
{}
"""
bucket_code = """
resource "aws_s3_bucket" "{}" {{
bucket = "{}"
}}
"""
bucket_configs = [bucket_code.format(name, name) for name in buckets]
full_code = tf_code.format('\n'.join(bucket_configs))
with open('s3.tf', 'w') as f:
f.write(full_code)
provider "aws" {
region = "us-west-2"
}
resource "aws_s3_bucket" "bucket1" {
bucket = "bucket1"
}
resource "aws_s3_bucket" "bucket2" {
bucket = "bucket2"
}
resource "aws_s3_bucket" "bucket3" {
bucket =
Please continue reading DevOps automation using Python - Part 2
Thanks for sharing such a valuable article and well explained text.
ReplyDelete