Efficient Argo Workflow Deletion and ECR Image Integration Script

Overview :-

#Argo workflows provide a robust framework for #orchestrating complex tasks and processes in #Kubernetes environments. However, as workflows accumulate, managing their lifecycle becomes paramount. The script discussed in this context offers a comprehensive solution for automatically deleting outdated or completed #ArgoWorkflows. This not only ensures a clutter-free environment but also frees up valuable resources and enhances overall system performance.

Pre-requestisites:-

  • argo-cli should be installed on your system

Step-1 :- First write a #python script to delete the argo-workflows which is older then 2 days. Below is the sample #python script that delete’s the workflows.

Step-2 :- Create a directory named app in your home directory. with in the app directory create a file with .py extension and paste the below script into the file.

import subprocess
import json
import datetime

def delete_old_workflows():
    argo_namespace = "argo"
    current_date = datetime.datetime.now(datetime.timezone.utc)
    threshold = datetime.timedelta(days=2)

    # Get the list of Argo Workflow runs
    cmd = ["argo", "list", "-n", argo_namespace, "-o", "json"]
    try:
        output = subprocess.check_output(cmd)
        workflows = json.loads(output)
    except subprocess.CalledProcessError as e:
        print(f"Error getting Argo workflows: {e}")
        return

    for workflow in workflows:
        started_at = workflow["status"].get("startedAt", workflow["metadata"]["creationTimestamp"])
        started_at_datetime = datetime.datetime.fromisoformat(started_at.replace("Z", "+00:00"))
        age = current_date - started_at_datetime

        if age > threshold:
            workflow_name = workflow["metadata"]["name"]
            print(f"Deleting Argo workflow: {workflow_name}")
            try:
                subprocess.check_output(["argo", "delete", "-n", argo_namespace, workflow_name])
            except subprocess.CalledProcessError as e:
                print(f"Error deleting Argo workflow: {e}")

if __name__ == "__main__":
    delete_old_workflows()

Step-3 :- Now we need to create a docker file to build an image with above script. copy & paste the Below code into the docker file.

# Use the base image
FROM python:3.8

# Install argo CLI
RUN curl -sLO https://github.com/argoproj/argo/releases/download/v3.2.1/argo-linux-amd64.gz && \
    gunzip argo-linux-amd64.gz && \
    chmod +x argo-linux-amd64 && \
    mv argo-linux-amd64 /usr/local/bin/argo

# Set the working directory
WORKDIR /app

# Copy your script and other files
COPY script.py /app/

# Run the script
CMD ["python", "script.py"]

Step-4 :- Next open a command prompt or terminal window & locate to the app directory and build a docker image using above docker file.

Step-5 :- Login to your aws management console and navigate to #ECR service and create a private repository to push the docker image into #AmazonECR (elastic container registry). Use Below command to build,tag and push.

  • Build your #Docker image using the following command.
docker build -t argo-workflows .
  • Once building the Image is being completed Login to your ECR repository using below command
aws ecr get-login-password - region ca-central-1 | docker login - username AWS - password-stdin 123456789.dkr.ecr.ca-central-1.amazonaws.com
  • After the Login is Succeded, tag your image so you can push the image to this repository:
docker tag argo-workflows:latest 123456789.dkr.ecr.ca-central-1.amazonaws.com/argo-workflows:latest
  • Run the following command to push this image to your newly created #AWS repository:
docker push 123456789.dkr.ecr.ca-central-1.amazonaws.com/argo-workflows:latest

Step-6 :- After the image is being pushed create a yaml file in your app directory and copy the below code into that file to delete the workflows using a docker image.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  name: delete-workflows
  namespace: argo
spec:
  entrypoint: main
  templates:
    - name: main
      steps:
        - - name: delete-workflows
            template: delete-workflows
    - name: delete-workflows
      container:
        image: "12346789.dkr.ecr.ca-central-1.amazonaws.com/argo-workflows:latest"
        command: ["python", "script.py"]

Step-7 :- Now open a command prompt or terminal and configure your argo-workflows and run the below command or submit the workflow to delete the old argo-workflows.

# cmd to submit the workflows
argo submit workflow.yaml -n argo
  • After running the above command u can see that the old workflows is being started running and that workflows will be deleting the old workflows. Once the running workflow got successed u can see that it has been deleted the argo-workflows which is greater than 2 days.

Find the source code Here :- https://github.com/MahiraTechnology/Mahira-medium.git”

Conclusion :-

Streamlining #DevOps with #Comprehensive Workflow Deletion and ECR Image Integration

In the realm of #DevOps, automation is a cornerstone for achieving #efficiency and #reliability. The discussed script for Argo workflow deletion, coupled with ECR image #integration, encapsulates this principle perfectly. By seamlessly combining these two functionalities, #developers and #DevOps teams can:

  1. Maintain a Clean Environment: The script automates the removal of redundant or completed Argo workflows, ensuring that only #relevant processes persist. This promotes a clutter-free environment and optimizes resource utilization.

  2. Enhance Performance: The ability to delete outdated workflows on schedule prevents unnecessary resource consumption, leading to improved #system performance and responsiveness.

0
Subscribe to my newsletter

Read articles from Mahira Technology Private Limited directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Mahira Technology Private Limited
Mahira Technology Private Limited

A leading tech consulting firm specializing in innovative solutions. Experts in cloud, DevOps, automation, data analytics & more. Trusted technology partner.