Python ist eine großartige Sprache für die Automatisierung. Ansible, SaltStack und Fabric sind Python-basiert. Die meisten DevOps-Tools bieten ein SDK für Python.
Cloud-Anbieter wie AWS, Google Cloud Platform (GCP) und
Azure bietet ein SDK für Python. Die Python-Standardbibliothek bietet
Funktionen, die die Automatisierung unterstützen. Python ist eine gute Alternative zu Bash. Python-Skripte können getestet und wiederverwendet werden.
Python-Skripte, die als CLI-Anwendung (Command Line Interface) verfügbar sind, ermöglichen DevOps. Es ist sehr einfach,
eine CLI in Python zu erstellen. Lassen Sie uns sehen, wie das funktioniert!
Eimer
Wir werden eine kleine Anwendung erstellen, die das AWS SDK für Python verwendet. Die Anwendung
ist auf Github verfügbar und heißt buckets. Wir werden schrittweise
Funktionen zu Buckets hinzufügen. Auf diese Weise lernen wir, wie man CLI-Anwendungen erstellt.
Hallo-Eimer
Python unterstützt die Erstellung von CLI-Anwendungen. Das Paket click ermöglicht es Python-Programmierern
, schöne CLI-Anwendungen zu erstellen. Die Verzweigung 01-hello-buckets
zeigt, was notwendig ist, um eine einfache CLI zu erstellen.
import click
@click.command()
def main():
"""Bucket, your interface to S3"""
print("Hello, I am Buckets")
Die einfachste CLI-App enthält eine einzelne Funktion, die mit @click.command() dekoriert wurde. Die Annotation weist
click an, eine CLI-App zu erstellen. Wenn wir python buckets/buckets.py --help ausführen, wird das Folgende ausgegeben:
Usage: buckets.py [OPTIONS]
Bucket, your interface to S3
Options:
--help Show this message and exit.
Und wenn wir die Anwendung python buckets/buckets.py ausführen, wird sie gedruckt:
Hello, I am Buckets
Paketieren, installieren und ausführen
Eine CLI-Anwendung sollte eigenständig laufen. Das Projekt 01-hello-buckets
enthält die Datei setup.py, die zum Verpacken der CLI-Anwendung verwendet wird.
Mit buckets oder buckets --help
um die CLI-Anwendung auszuführen. Buckets können jetzt in DevOps-Pipelines verwendet werden. Mit make uninstall deinstallieren wir Buckets.
AWS S3
AWS Simple Storage Service (S3) ist ein umfangreicher Speicherdienst. AWS bietet ein SDK namens
für die Schnittstelle zu S3. Die Verzweigung 02-boto-buckets zeigt, wie Sie einen Befehl
erstellen, um alle S3-Buckets in Ihrem AWS-Konto anzuzeigen.
import click
import boto3
client = boto3.client('s3')
@click.command()
def main():
"""Bucket, your interface to S3"""
rows = []
rows.append(['BucketName', 'CreationDate'])
for bucket in client.list_buckets()['Buckets']:
rows.append([bucket['Name'], bucket['CreationDate'].__str__()])
print(render_table(rows))
Nach make dist und make install ruft Buckets alle Buckets aus S3 ab und zeigt sie an:
BucketName CreationDate
=============================================== =========================
dennisvriend 2018-08-15 19:47:35+00:00
dennisvriend.com 2018-06-04 18:56:29+00:00
Mehrere Befehle
Der Zweig 03-multiple-commands zeigt, wie Sie mehrere Befehle erstellen können.
Buckets unterstützt jetzt ls, du und count als Befehle.
import click
import boto3
client = boto3.client('s3')
@click.group()
def main():
"""Bucket, your interface to S3"""
@main.command()
def ls():
"""Print all buckets"""
rows = []
rows.append(['BucketName', 'CreationDate'])
for bucket in client.list_buckets()['Buckets']:
rows.append([bucket['Name'], bucket['CreationDate'].__str__()])
print(render_table(rows))
@main.command()
def du():
"""Print usage per bucket"""
rows = []
rows.append(['BucketName', 'CreationDate', 'Number of objects', 'Bytes'])
for bucket in client.list_buckets()['Buckets']:
num_objects, total_bytes = get_bucket_size(bucket['Name'])
rows.append([bucket['Name'], bucket['CreationDate'].__str__(), num_objects, total_bytes])
print(render_table(rows))
@main.command()
def count():
"""Count the number of buckets"""
sum = 0
for _ in client.list_buckets()['Buckets']:
sum += 1
print(f'{str(sum)} buckets')
Wenn wir python buckets/buckets.py --help ausführen, wird das Folgende gedruckt:
Usage: buckets.py [OPTIONS] COMMAND [ARGS]...
Bucket, your interface to S3
Options:
--help Show this message and exit.
Commands:
count Count the number of buckets
du Print usage per bucket
ls Print all buckets
Wenn wir python buckets/buckets.py count aufrufen, wird der Befehl count ausgeführt. Die Methode main wurde dekoriert mit
@click.group(). Damit wird click angewiesen, eine CLI-App zu erstellen. Wir können mehrere Befehle hinzufügen, indem wir
mit anderen Methoden ausstatten. Beachten Sie, dass wir die anderen Methoden mit dem Namen
group main. Wenn Sie der Gruppe Befehle hinzufügen, können Sie mehrere Befehle hinzufügen und diese über die CLI ausführen.
Fazit
Es ist sehr einfach, CLI-Anwendungen in Python zu erstellen, indem Sie Funktionen dekorieren. Wir verwenden die
und
@main.command() um zu kennzeichnen, dass diese Methoden zur Gruppe main gehören. Auf diese Weise können wir der CLI-App mehrere Befehle hinzufügen.
Wir haben die Grundlagen der Erstellung von CLI-Apps mit Python behandelt. Click hat uns noch viel mehr zu bieten. Beim nächsten Mal werden wir die Buckets
um Parameter, Standardwerte, Flags und Umgebungsvariablen erweitern.
Verfasst von
Dennis Vriend
Unsere Ideen
Weitere Blogs
Contact



