ദൈനംദിന ഓട്ടോമേഷന് വേണ്ടി പൈഥണ്
ക്ലൌഡ് ക്ലീനിംഗ് മുതൽ കുബർനെറ്റ്സ് റിപ്പോർട്ടുകൾ വരെ മണിക്കൂറുകൾ ലാഭിക്കുന്ന ചെറിയ പൈഥൺ ടൂളുകൾ.
ക്ലൌഡ് ക്ലീനിംഗ് മുതൽ കുബർനെറ്റ്സ് റിപ്പോർട്ടുകൾ വരെ മണിക്കൂറുകൾ ലാഭിക്കുന്ന ചെറിയ പൈഥൺ ടൂളുകൾ.

ഒരു ബാഷ് സ്ക്രിപ്റ്റ് നൂറ് വരികൾക്കപ്പുറം വളരുമ്പോള് , അല്ലെങ്കിൽ ഒരു API- യുമായി സംസാരിക്കാന് ആവശ്യപ്പെടുമ്പോള്, ഞാന് പൈഥോണിലേക്ക് മാറുന്നു. വായിക്കാവുന്നതാണ്, മിക്കവാറും എല്ലാത്തിനും ഒരു ലൈബ്രറിയുണ്ട്, സഹപ്രവർത്തകര് ക്ക് ഡീകോഡിംഗ് സെഷന് ഇല്ലാതെ തന്നെ അത് മനസ്സിലാക്കാൻ കഴിയും.
DevOps-നു വേണ്ടി ഉപയോഗപ്രദമായ പൈത്തൺ എഴുതാൻ സോഫ്റ്റ് വെയർ എഞ്ചിനീയർ ആവേണ്ട ആവശ്യമില്ല. കുറച്ച് ലൈബ്രറികളും ശീലങ്ങളും നിങ്ങൾക്ക് ആവശ്യമുള്ള മിക്കതും ഉൾക്കൊള്ളുന്നു.
azure-identity സേവന SDK കളും ഗൂഗിൾ ക്ലൌഡും google-cloud-* ലൈബ്രറികള്)പൈത്തൺ പാക്കേജിംഗ് വേദനയേറിയതായിരുന്നു: വിർച്വൽ പരിതസ്ഥിതികൾ, പിപ്, ആവശ്യകത ഫയലുകൾ, പതിപ്പ് വൈരുദ്ധ്യങ്ങൾ. uv, ആസ്ട്രലില് നിന്നും, അത് വളരെ ലളിതവും വേഗവുമാക്കി.
uv init cloud-tools
cd cloud-tools
uv add boto3 typer rich
uv run python main.py
ചെറിയ സ്ക്രിപ്റ്റുകളിലെ എന്റെ പ്രിയപ്പെട്ട സവിശേഷത: ഇൻലൈൻ ആശ്രിതത്വം. ഒരു ഫയലിന്റെ മുകളില് നിങ്ങള്ക്ക് ആശ്രയത്വങ്ങള് പ്രഖ്യാപിക്കാം, uv run പരിസ്ഥിതി യാന്ത്രികമായി കൈകാര്യം ചെയ്യുന്നു:
# /// script
# requires-python = ">=3.12"
# dependencies = ["boto3", "typer", "rich"]
# ///
പിന്നെ ആർക്കും ഓടാം. uv run cleanup.py ഒന്നും ക്രമീകരിക്കാതെ. ഒരു ടീമിൽ ചെറിയ ഉപകരണങ്ങൾ പങ്കുവയ്ക്കാൻ പറ്റിയതാണ്.
ഏറ്റവും നല്ല ഓട്ടോമേഷൻ സ്ക്രിപ്റ്റ് നാളെ ഒരു സഹപ്രവർത്തകന് എങ്ങനെ ചെയ്യണമെന്ന് ചോദിക്കാതെ തന്നെ പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്നതാണ്.
ഒരു യഥാർത്ഥ ലോക ഉദാഹരണംഃ ബന്ധിപ്പിക്കാത്ത EBS വോള്യങ്ങൾ കണ്ടെത്തുക (ഒരു ക്ലാസിക് മാലിന്യ സ്രോതസ്സ്) അവയെ ഇല്ലാതാക്കുക.
# /// script
# requires-python = ">=3.12"
# dependencies = ["boto3", "typer", "rich"]
# ///
import boto3
import typer
from rich.console import Console
from rich.table import Table
app = typer.Typer()
console = Console()
@app.command()
def unattached_volumes(
region: str = "eu-central-1",
delete: bool = typer.Option(False, help="Actually delete the volumes"),
):
"""List (and optionally delete) unattached EBS volumes."""
ec2 = boto3.client("ec2", region_name=region)
paginator = ec2.get_paginator("describe_volumes")
pages = paginator.paginate(Filters=[{"Name": "status", "Values": ["available"]}])
table = Table("Volume ID", "Size (GiB)", "Created", "Name")
volumes = []
for page in pages:
for v in page["Volumes"]:
name = next((t["Value"] for t in v.get("Tags", []) if t["Key"] == "Name"), "-")
table.add_row(v["VolumeId"], str(v["Size"]), v["CreateTime"].date().isoformat(), name)
volumes.append(v["VolumeId"])
console.print(table)
console.print(f"[bold]{len(volumes)}[/bold] unattached volumes in {region}")
if delete and volumes and typer.confirm("Delete all of them?"):
for vol_id in volumes:
ec2.delete_volume(VolumeId=vol_id)
console.print(f"Deleted {vol_id}")
if __name__ == "__main__":
app()
ചില ശീലങ്ങൾ ശ്രദ്ധിക്കുക:
--delete, പിന്നെ സ്ഥിരീകരണം ആവശ്യപ്പെടുകയും ചെയ്യുന്നു.ഏത് പാഡുകളിലാണ് വിഭവ അഭ്യർത്ഥനകളില്ലാത്തത്? ഒരു ചോദ്യം പലപ്പോഴും ഉയരുന്നുണ്ട്:
from kubernetes import client, config
config.load_kube_config() # or load_incluster_config() inside a pod
v1 = client.CoreV1Api()
for pod in v1.list_pod_for_all_namespaces().items:
for c in pod.spec.containers:
requests = (c.resources and c.resources.requests) or {}
if "cpu" not in requests or "memory" not in requests:
print(f"{pod.metadata.namespace}/{pod.metadata.name} [{c.name}] missing requests")
പത്ത് വരികൾ, പിന്നെ നിനക്ക് ഒരു റിപ്പോർട്ട് കിട്ടും, അത് എല്ലാ ആഴ്ചയും ഐ. സി. യിൽ പോസ്റ്റ് ചെയ്യാം.
ഒരു തിരക്കഥ ടീം ആശ്രയിക്കുന്ന ഒന്നായി മാറുമ്പോൾ:
uv tool install.ഓരോ ആഴ്ചയും നിങ്ങൾ ചെയ്യുന്ന ഒരു ആവർത്തിച്ചുള്ള ജോലി തിരഞ്ഞെടുക്കുക, ഉദാഹരണത്തിന് വിഭവങ്ങൾ വൃത്തിയാക്കുക, ഒരു റിപ്പോർട്ട് സൃഷ്ടിക്കുക അല്ലെങ്കിൽ സർട്ടിഫിക്കറ്റുകൾ പരിശോധിക്കുക. യുവി യുടെ ഇൻലൈൻ ആശ്രിതത്വങ്ങളുള്ള ഒരു ചെറിയ പൈഥൺ സ്ക്രിപ്റ്റ് എഴുതുക. അത് പങ്കുവെക്കൂ. ടീം എത്ര പെട്ടെന്ന് കൂടുതൽ ആവശ്യപ്പെടുന്നു എന്ന് നിങ്ങള് ക്ക് അത്ഭുതപ്പെടും.
എന്റെ അഭിപ്രായം: പൈത്തൺ "ഞാൻ ഇത് കൈകൊണ്ട് ചെയ്യും, ഇത് പത്ത് മിനിറ്റ് മാത്രമേ എടുക്കൂ" എന്ന് "ഇത് എല്ലാ രാത്രിയും പ്രവർത്തിക്കുന്നു, ആരും അതിനെക്കുറിച്ച് ചിന്തിക്കുന്നില്ല" എന്ന് മാറ്റുന്നു.
ഡെസ്ലി