add script and readme

This commit is contained in:
tsvetkov
2026-02-27 10:11:26 +00:00
commit bd7e138b3a
2 changed files with 93 additions and 0 deletions

90
eaa-bulk-deploy.py Normal file
View File

@@ -0,0 +1,90 @@
import requests
from akamai.edgegrid import EdgeGridAuth
from urllib.parse import urljoin
import json
# Collect the edge authentication details
def get_user_inputs():
base_url = input("Enter the Base URL (eg. https://endpoint-akamai.com/crux/v1/mgmt-pop): ").strip()
client_token = input("Enter the Client Token: ").strip()
client_secret = input("Enter the Client Secret: ").strip()
access_token = input("Enter the Access Token: ").strip()
return base_url, client_token, client_secret, access_token
BASE_URL, CLIENT_TOKEN, CLIENT_SECRET, ACCESS_TOKEN = get_user_inputs()
# Create the session authentication
session = requests.Session()
session.auth = EdgeGridAuth(
client_token=CLIENT_TOKEN,
client_secret=CLIENT_SECRET,
access_token=ACCESS_TOKEN
)
# Generate the list of apps with pending changes
# If you want to limit this to certain amount of apps, add max_apps so the function definition looks as such:
## def get_apps_pending_deployment(max_apps=15):
# If using max_apps, also uncomment the if statement on lines 57-58
def get_apps_pending_deployment():
pending_uuids = []
offset = 0
limit = 1
while True:
response = session.get(
f"{BASE_URL}/apps",
headers=HEADERS,
params={"limit": limit, "offset": offset}
)
response.raise_for_status()
data = response.json()
apps = data.get("objects", [])
# No more apps to process
if not apps:
break
app = apps[0]
app_status = app.get("app_status")
uuid_url = app.get("uuid_url")
if app_status != 2:
print(f"App {uuid_url} has status {app_status} - marking for deployment")
pending_uuids.append(uuid_url)
# Uncomment the below if statement if limit with max_apps=
#if len(pending_uuids) >= max_apps:
# break
# Stop if we've reached the total count
total = data.get("meta", {}).get("total_count", 0)
offset += 1
if offset >= total:
break
return pending_uuids
# Function that deploys the apps generated from the above list
def deploy_apps(pending_uuids):
for uuid_url in pending_uuids:
print(f"Deploying app: {uuid_url}")
response = session.post(
f"{BASE_URL}/apps/{uuid_url}/deploy",
headers=HEADERS
)
response.raise_for_status()
print(f"Successfully deployed: {uuid_url}")
if __name__ == "__main__":
print("Stage 1: Finding apps with pending deployments...")
pending_uuids = get_apps_pending_deployment()
print(f"\nFound {len(pending_uuids)} apps to deploy: {pending_uuids}")
if pending_uuids:
print("\nStage 2: Deploying apps...")
deploy_apps(pending_uuids)
print("\nAll deployments complete.")
else:
print("\nNo apps require deployment.")