Als je veel WordPress sites beheert, ben je waarschijnlijk altijd op zoek naar manieren om je werkprocessen te vereenvoudigen en te versnellen.
Stel je dit eens voor: met één commando in je terminal kun je handmatige backups voor al je sites activeren, zelfs als je er tientallen beheert. Dat is de kracht van het combineren van shellscripts met de Kinsta API.
Deze handleiding leert je hoe je shellscripts kunt gebruiken om aangepaste commando’s in te stellen die het beheren van je sites efficiënter maken.
Vereisten
Voordat we beginnen, hier is wat je nodig hebt:
- Een terminal: Alle moderne besturingssystemen worden geleverd met terminal software, dus je kunt meteen beginnen met scripts maken.
- Een IDE of tekstverwerker: Gebruik een tool waar je vertrouwd mee bent, of het nu VS Code, Sublime Text of zelfs een lichtgewicht editor zoals Nano is voor snelle terminalbewerkingen.
- Een Kinsta API-sleutel: Dit is essentieel voor interactie met de Kinsta API. Om de jouwe te genereren:
- Log in op je MyKinsta dashboard.
- Ga naar Je naam > Bedrijfsinstellingen > API-sleutels.
- Klik op API-sleutel aanmaken en sla deze veilig op.
curl
enjq
: Essentieel voor het maken van API-verzoeken en het verwerken van JSON-gegevens. Controleer of ze geïnstalleerd zijn, of installeer ze.- Basiskennis van programmeren: Je hoeft geen expert te zijn, maar kennis van de basis van programmeren en shell scripting syntaxis kan helpen.
Je eerste script schrijven
Het maken van je eerste shellscript voor interactie met de Kinsta API is eenvoudiger dan je zou denken. Laten we beginnen met een eenvoudig script dat een lijst maakt van alle WordPress sites die worden beheerd onder je Kinsta account.
Stap 1: Stel je omgeving in
Begin met het maken van een map voor je project en een nieuw scriptbestand. De extensie .sh
wordt gebruikt voor shellscripts. Je kunt bijvoorbeeld een map maken, ernaar navigeren en een scriptbestand maken en openen in VS Code met deze commando’s:
mkdir my-first-shell-scripts
cd my-first-shell-scripts
touch script.sh
code script.sh
Stap 2: Definieer je omgevingsvariabelen
Om je API-sleutel veilig te houden, sla je hem op in een .env
bestand in plaats van hem te hardcoden in het script. Hierdoor kun je het bestand .env
toevoegen aan .gitignore
en voorkomen dat het naar versiebeheer wordt gepushed.
Voeg in je .env
bestand toe:
API_KEY=your_kinsta_api_key
Pull vervolgens de API-sleutel uit het .env
bestand naar je script door het volgende toe te voegen bovenaan je script:
#!/bin/bash
source .env
De #!/bin/bash
shebang zorgt ervoor dat het script draait met Bash, terwijl source .env
de omgevingsvariabelen importeert.
Stap 3: Schrijf het API-verzoek
Sla eerst je bedrijfs-ID (te vinden in MyKinsta onder Bedrijfsinstellingen > Factureringsgegevens) op in een variabele:
COMPANY_ID="<your_company_id>"
Voeg vervolgens het curl commando toe om een GET verzoek te doen naar het /sites
endpoint, waarbij je de bedrijfs-ID doorgeeft als een query parameter. Gebruik jq om de uitvoer leesbaar op te maken:
curl -s -X GET
"https://api.kinsta.com/v2/sites?company=$COMPANY_ID"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json" | jq
Met dit verzoek worden details opgehaald over alle sites die aan je bedrijf zijn gekoppeld, inclusief hun ID’s, namen en statussen.
Stap 4: Maak het script uitvoerbaar
Sla het script op en maak het uitvoerbaar door het volgende uit te voeren:
chmod +x script.sh
Stap 5: Voer het script uit
Voer het script uit om een opgemaakte lijst van je sites te zien:
./list_sites.sh
Als je het script uitvoert, krijg je een antwoord dat hierop lijkt:
{
"company": {
"sites": [
{
"id": "a8f39e7e-d9cf-4bb4-9006-ddeda7d8b3af",
"name": "bitbuckettest",
"display_name": "bitbucket-test",
"status": "live",
"site_labels": []
},
{
"id": "277b92f8-4014-45f7-a4d6-caba8f9f153f",
"name": "duketest",
"display_name": "zivas Signature",
"status": "live",
"site_labels": []
}
]
}
}
Dit werkt, maar laten we het verbeteren door een functie in te stellen om de sitegegevens op te halen en te formatteren voor een betere leesbaarheid.
Stap 6: Refactor met een functie
Vervang het curl
verzoek door een herbruikbare functie voor het ophalen en opmaken van de sitelijst:
list_sites() {
echo "Fetching all sites for company ID: $COMPANY_ID..."
RESPONSE=$(curl -s -X GET "https://api.kinsta.com/v2/sites?company=$COMPANY_ID"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json")
# Check for errors
if [ -z "$RESPONSE" ]; then
echo "Error: No response from the API."
exit 1
fi
echo "Company Sites:"
echo "--------------"
echo "$RESPONSE" | jq -r '.company.sites[] | "(.display_name) ((.name)) - Status: (.status)"'
}
# Run the function
list_sites
Als je het script opnieuw uitvoert, krijg je netjes opgemaakte uitvoer:
Fetching all sites for company ID: b383b4c-****-****-a47f-83999c5d2...
Company Sites:
--------------
bitbucket-test (bitbuckettest) - Status: live
zivas Signature (duketest) - Status: live
Met dit script heb je de eerste stap gezet naar het gebruik van shell scripts en de Kinsta API voor het automatiseren van WordPress sitebeheer. In de volgende secties verkennen we het maken van meer geavanceerde scripts om op krachtige manieren te communiceren met de API.
Geavanceerd gebruik 1: Backups maken
Het maken van backups is een cruciaal aspect van websitebeheer. Hiermee kun je je site herstellen in geval van onvoorziene problemen. Met de Kinsta API en shellscripts kan dit proces worden geautomatiseerd, wat tijd en moeite bespaart.
In dit gedeelte maken we backups en gaan we in op Kinsta’s limiet van vijf handmatige backups per omgeving. Om dit aan te pakken, implementeren we een proces om:
- Het huidige aantal handmatige backups te controleren.
- De oudste backup identificeren en verwijderen (met bevestiging van de gebruiker) als de limiet is bereikt.
- Doorgaan met het maken van een nieuwe backup.
Laten we de details bekijken.
De backup workflow
Om backups te maken met de Kinsta API gebruik je het volgende endpoint:
POST /sites/environments/{env_id}/manual-backups
Dit vereist:
- Omgeving ID: Identificeert de omgeving (zoals test of productie) waar de backup wordt gemaakt.
- Backup label: Een label om de backup te identificeren (optioneel).
Het handmatig achterhalen van de omgevings-ID en het uitvoeren van een commando als backup <environment ID>
kan omslachtig zijn. In plaats daarvan maken we een gebruiksvriendelijk script waarbij je gewoon de sitenaam opgeeft en het script zal:
- De lijst met omgevingen voor de site ophalen.
- Je vragen om de omgeving te kiezen waarvan je een backup wilt maken.
- Het aanmaken van de backup afhandelen.
Herbruikbare functies voor schone code
Om ons script modulair en herbruikbaar te houden, definiëren we functies voor specifieke taken. Laten we de instellingen stap voor stap doorlopen.
1. Basisvariabelen instellen
Je kunt het eerste script dat je hebt gemaakt weglaten of hiervoor een nieuw scriptbestand maken. Begin met het declareren van de basis Kinsta API URL en je bedrijfs-ID in het script:
BASE_URL="https://api.kinsta.com/v2"
COMPANY_ID="<your_company_id>"
Met deze variabelen kun je API endpoints dynamisch door het script heen construeren.
2. Alle sites ophalen
Definieer een functie om de lijst van alle bedrijfslocaties op te halen. Zo kun je later details over elke site ophalen.
get_sites_list() {
API_URL="$BASE_URL/sites?company=$COMPANY_ID"
echo "Fetching all sites for company ID: $COMPANY_ID..."
RESPONSE=$(curl -s -X GET "$API_URL"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json")
# Check for errors
if [ -z "$RESPONSE" ]; then
echo "Error: No response from the API."
exit 1
fi
echo "$RESPONSE"
}
Je zult zien dat deze functie een ongeformatteerd antwoord van de API teruggeeft. Om een geformatteerd antwoord te krijgen. Je kunt een andere functie toevoegen om dat af te handelen (hoewel dat niet onze zorg is in deze sectie):
list_sites() {
RESPONSE=$(get_sites_list)
if [ -z "$RESPONSE" ]; then
echo "Error: No response from the API while fetching sites."
exit 1
fi
echo "Company Sites:"
echo "--------------"
# Clean the RESPONSE before passing it to jq
CLEAN_RESPONSE=$(echo "$RESPONSE" | tr -d 'r' | sed 's/^[^{]*//') # Removes extra characters before the JSON starts
echo "$CLEAN_RESPONSE" | jq -r '.company.sites[] | "(.display_name) ((.name)) - Status: (.status)"'
}
Als je de functie list_sites
callt, worden je sites weergegeven zoals eerder getoond. Het belangrijkste doel is echter om toegang te krijgen tot elke site en zijn ID, zodat je gedetailleerde informatie over elke site kunt ophalen.
3. Sitegegevens ophalen
Om details over een specifieke site op te halen, gebruik je de volgende functie, die het ID van de site ophaalt op basis van de sitenaam en aanvullende details ophaalt, zoals omgevingen:
get_site_details_by_name() {
SITE_NAME=$1
if [ -z "$SITE_NAME" ]; then
echo "Error: No site name provided. Usage: $0 details-name "
return 1
fi
RESPONSE=$(get_sites_list)
echo "Searching for site with name: $SITE_NAME..."
# Clean the RESPONSE before parsing
CLEAN_RESPONSE=$(echo "$RESPONSE" | tr -d 'r' | sed 's/^[^{]*//')
# Extract the site ID for the given site name
SITE_ID=$(echo "$CLEAN_RESPONSE" | jq -r --arg SITE_NAME "$SITE_NAME" '.company.sites[] | select(.name == $SITE_NAME) | .id')
if [ -z "$SITE_ID" ]; then
echo "Error: Site with name "$SITE_NAME" not found."
return 1
fi
echo "Found site ID: $SITE_ID for site name: $SITE_NAME"
# Fetch site details using the site ID
API_URL="$BASE_URL/sites/$SITE_ID"
SITE_RESPONSE=$(curl -s -X GET "$API_URL"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json")
echo "$SITE_RESPONSE"
}
De bovenstaande functie filtert de site op basis van de sitenaam en haalt vervolgens aanvullende details over de site op met behulp van het /sites/<site-id>
endpoint. Deze details omvatten de omgevingen van de site, die we nodig hebben om backups te maken.
Backups maken
Nu je herbruikbare functies hebt ingesteld om sitegegevens op te halen en omgevingen op te sommen, kun je je richten op het automatiseren van het maken van backups. Het doel is om een eenvoudig commando uit te voeren met alleen de sitenaam en dan interactief de omgeving te kiezen waarvan je een backup wilt maken.
Begin met het maken van een functie (we noemen hem trigger_manual_backup
). Binnen de functie definieer je twee variabelen: de eerste om de sitenaam als invoer te accepteren en de tweede om een standaard tag (default-backup
) in te stellen voor de backup. Deze standaard tag wordt toegepast tenzij je later een aangepaste tag opgeeft.
trigger_manual_backup() {
SITE_NAME=$1
DEFAULT_TAG="default-backup"
# Ensure a site name is provided
if [ -z "$SITE_NAME" ]; then
echo "Error: Site name is required."
echo "Usage: $0 trigger-backup "
return 1
fi
# Add the code here
}
Deze SITE_NAME
is de identificatie voor de site die je wilt beheren. Je stelt ook een voorwaarde in zodat het script wordt afgesloten met een foutmelding als de identifier niet wordt opgegeven. Dit zorgt ervoor dat het script niet verder gaat zonder de benodigde invoer en voorkomt mogelijke API fouten.
Vervolgens gebruik je de herbruikbare get_site_details_by_name
functie om gedetailleerde informatie over de site op te halen, inclusief de omgevingen. Het antwoord wordt vervolgens opgeschoond om onverwachte opmaakproblemen te verwijderen die zich tijdens het verwerken kunnen voordoen.
SITE_RESPONSE=$(get_site_details_by_name "$SITE_NAME")
if [ $? -ne 0 ]; then
echo "Error: Failed to fetch site details for site "$SITE_NAME"."
return 1
fi
CLEAN_RESPONSE=$(echo "$SITE_RESPONSE" | tr -d 'r' | sed 's/^[^{]*//')
Zodra we de gegevens van de site hebben, haalt het onderstaande script alle beschikbare omgevingen eruit en geeft ze weer in een leesbaar formaat. Dit helpt je te visualiseren welke omgevingen zijn gekoppeld aan de site.
Het script vraagt je vervolgens om een omgeving te selecteren op naam. Deze interactieve stap maakt het proces gebruiksvriendelijk doordat je geen ID’s van omgevingen hoeft te onthouden of in te voeren.
ENVIRONMENTS=$(echo "$CLEAN_RESPONSE" | jq -r '.site.environments[] | "(.name): (.id)"')
echo "Available Environments for "$SITE_NAME":"
echo "$ENVIRONMENTS"
read -p "Enter the environment name to back up (e.g., staging, live): " ENV_NAME
De geselecteerde omgevingsnaam wordt vervolgens gebruikt om de bijbehorende omgevings-ID op te zoeken in de sitegegevens. Deze ID is nodig voor API-verzoeken om een backup te maken.
ENV_ID=$(echo "$CLEAN_RESPONSE" | jq -r --arg ENV_NAME "$ENV_NAME" '.site.environments[] | select(.name == $ENV_NAME) | .id')
if [ -z "$ENV_ID" ]; then
echo "Error: Environment "$ENV_NAME" not found for site "$SITE_NAME"."
return 1
fi
echo "Found environment ID: $ENV_ID for environment name: $ENV_NAME"
In de bovenstaande code wordt een voorwaarde gemaakt zodat het script wordt afgesloten met een foutmelding als de opgegeven omgevingsnaam niet overeenkomt.
Nu je de omgevings-ID hebt, kun je doorgaan met het controleren van het huidige aantal handmatige backups voor de geselecteerde omgeving. Kinsta’s limiet van vijf handmatige backups per omgeving betekent dat deze stap cruciaal is om fouten te voorkomen.
Laten we beginnen met het ophalen van de lijst met backups met behulp van het /backups
API endpoint.
API_URL="$BASE_URL/sites/environments/$ENV_ID/backups"
BACKUPS_RESPONSE=$(curl -s -X GET "$API_URL"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json")
CLEAN_RESPONSE=$(echo "$BACKUPS_RESPONSE" | tr -d 'r' | sed 's/^[^{]*//')
MANUAL_BACKUPS=$(echo "$CLEAN_RESPONSE" | jq '[.environment.backups[] | select(.type == "manual")]')
BACKUP_COUNT=$(echo "$MANUAL_BACKUPS" | jq 'length')
Het script hierboven filtert vervolgens op handmatige backups en telt ze. Als het aantal de limiet bereikt, moeten we de bestaande backups beheren:
if [ "$BACKUP_COUNT" -ge 5 ]; then
echo "Manual backup limit reached (5 backups)."
# Find the oldest backup
OLDEST_BACKUP=$(echo "$MANUAL_BACKUPS" | jq -r 'sort_by(.created_at) | .[0]')
OLDEST_BACKUP_NAME=$(echo "$OLDEST_BACKUP" | jq -r '.note')
OLDEST_BACKUP_ID=$(echo "$OLDEST_BACKUP" | jq -r '.id')
echo "The oldest manual backup is "$OLDEST_BACKUP_NAME"."
read -p "Do you want to delete this backup to create a new one? (yes/no): " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
echo "Aborting backup creation."
return 1
fi
# Delete the oldest backup
DELETE_URL="$BASE_URL/sites/environments/backups/$OLDEST_BACKUP_ID"
DELETE_RESPONSE=$(curl -s -X DELETE "$DELETE_URL"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json")
echo "Delete Response:"
echo "$DELETE_RESPONSE" | jq -r '[
"Operation ID: (.operation_id)",
"Message: (.message)",
"Status: (.status)"
] | join("n")'
fi
De bovenstaande voorwaarde identificeert de oudste backup door de lijst te sorteren op basis van het created_at
tijdstempel. Vervolgens wordt gevraagd of je deze wilt verwijderen.
Als je akkoord gaat, verwijdert het script de oudste backup met zijn ID, zodat er ruimte vrijkomt voor de nieuwe. Dit zorgt ervoor dat er altijd backups kunnen worden gemaakt zonder dat de limieten handmatig moeten worden beheerd.
Nu er ruimte is, gaan we verder met de code om de backup voor de omgeving te activeren. Je kunt deze code gerust overslaan, maar voor een betere ervaring wordt je gevraagd om een custom tag op te geven, die standaard op “default-backup” wordt gezet als er geen is opgegeven.
read -p "Enter a backup tag (or press Enter to use "$DEFAULT_TAG"): " BACKUP_TAG
if [ -z "$BACKUP_TAG" ]; then
BACKUP_TAG="$DEFAULT_TAG"
fi
echo "Using backup tag: $BACKUP_TAG"
Tenslotte is het script hieronder waar de backup actie plaatsvindt. Het stuurt een POST
verzoek naar het /manual-backups
endpoint met de geselecteerde omgevings-ID en backup tag. Als het verzoek succesvol is, stuurt de API een antwoord terug waarin de aanmaak van de backup wordt bevestigd.
API_URL="$BASE_URL/sites/environments/$ENV_ID/manual-backups"
RESPONSE=$(curl -s -X POST "$API_URL"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json"
-d "{"tag": "$BACKUP_TAG"}")
if [ -z "$RESPONSE" ]; then
echo "Error: No response from the API while triggering the manual backup."
return 1
fi
echo "Backup Trigger Response:"
echo "$RESPONSE" | jq -r '[
"Operation ID: (.operation_id)",
"Message: (.message)",
"Status: (.status)"
] | join("n")'
Dat is het! Het antwoord dat wordt verkregen uit het bovenstaande verzoek is geformatteerd om de ID van de bewerking, het bericht en de status voor de duidelijkheid weer te geven. Als je de functie callt en het script uitvoert, zie je een uitvoer die hierop lijkt:
Available Environments for "example-site":
staging: 12345
live: 67890
Enter the environment name to back up (e.g., staging, live): live
Found environment ID: 67890 for environment name: live
Manual backup limit reached (5 backups).
The oldest manual backup is "staging-backup-2023-12-31".
Do you want to delete this backup to create a new one? (yes/no): yes
Oldest backup deleted.
Enter a backup tag (or press Enter to use "default-backup"): weekly-live-backup
Using backup tag: weekly-live-backup
Triggering manual backup for environment ID: 67890 with tag: weekly-live-backup...
Backup Trigger Response:
Operation ID: backups:add-manual-abc123
Message: Adding a manual backup to environment in progress.
Status: 202
Commando’s maken voor je script
Commando’s vereenvoudigen het gebruik van je script. In plaats van het script te bewerken of handmatig code te verwijderen, kunnen gebruikers het uitvoeren met een specifiek commando zoals:
./script.sh list-sites
./script.sh backup
Neem aan het einde van je script (buiten alle functies) een voorwaardelijk blok op dat de argumenten controleert die aan het script zijn doorgegeven:
if [ "$1" == "list-sites" ]; then
list_sites
elif [ "$1" == "backup" ]; then
SITE_NAME="$2"
if [ -z "$SITE_NAME" ]; then
echo "Usage: $0 trigger-backup "
exit 1
fi
trigger_manual_backup "$SITE_NAME"
else
echo "Usage: $0 {list-sites|trigger-backup }"
exit 1
fi
De variabele $1
vertegenwoordigt het eerste argument dat aan het script wordt doorgegeven (bijvoorbeeld in ./script.sh list-sites
, $1
is list-sites
). Het script gebruikt voorwaardelijke controles om $1
te matchen met specifieke commando’s zoals list-sites
of backup
. Als het commando backup
is, verwacht het ook een tweede argument ($2
), wat de sitenaam is. Als er geen geldig commando wordt gegeven, geeft het script standaard gebruiksinstructies weer.
Je kunt nu een handmatige backup voor een specifieke site starten door het commando uit te voeren:
./script.sh backup
Geavanceerd gebruik 2: Plugins bijwerken voor meerdere sites
Het beheren van WordPress plugins op meerdere sites kan vervelend zijn, vooral als er updates beschikbaar zijn. Kinsta regelt dit heel goed via het MyKinsta dashboard, door middel van de bulkactie-functie die we vorig jaar hebben geïntroduceerd.
Maar als je niet graag met gebruikersinterfaces werkt, biedt de Kinsta API een andere mogelijkheid om een shellscript te maken om het proces van het identificeren van verouderde plugins en het bijwerken ervan op meerdere sites of specifieke omgevingen te automatiseren.
De workflow opsplitsen
1. Identificeer sites met verouderde plugins: Het script doorloopt alle sites en omgevingen en zoekt naar de opgegeven plugin waarvan een update beschikbaar is. Het volgende endpoint wordt gebruikt om de lijst met plugins voor een specifieke siteomgeving op te halen:
GET /sites/environments/{env_id}/plugins
Uit het antwoord filteren we op plugins met "update": "available"
.
2. De gebruiker wordt gevraagd om updateopties: Het toont de sites en omgevingen met de verouderde plugin, zodat de gebruiker specifieke instanties kan selecteren of ze allemaal kan bijwerken.
3. Trigger plugin updates: Om de plugin in een specifieke omgeving bij te werken, gebruikt het script dit endpoint:
PUT /sites/environments/{env_id}/plugins
De naam van de plugin en de bijgewerkte versie worden doorgegeven in de request body.
Het script
Omdat het script lang is, wordt de volledige functie gehost op GitHub voor gemakkelijke toegang. Hier leggen we de kernlogica uit die wordt gebruikt om verouderde plugins op meerdere sites en omgevingen te identificeren.
Het script begint met het accepteren van de plugin naam van het commando. Deze naam specificeert de plugin die je wilt bijwerken.
PLUGIN_NAME=$1
if [ -z "$PLUGIN_NAME" ]; then
echo "Error: Plugin name is required."
echo "Usage: $0 update-plugin "
return 1
fi
Het script gebruikt dan de herbruikbare get_sites_list
functie (eerder uitgelegd) om alle sites in het bedrijf op te halen:
echo "Fetching all sites in the company..."
# Fetch all sites in the company
SITES_RESPONSE=$(get_sites_list)
if [ $? -ne 0 ]; then
echo "Error: Failed to fetch sites."
return 1
fi
# Clean the response
CLEAN_SITES_RESPONSE=$(echo "$SITES_RESPONSE" | tr -d 'r' | sed 's/^[^{]*//')
Vervolgens komt het hart van het script: door de lijst met sites lopen om te controleren op verouderde plugins. De CLEAN_SITES_RESPONSE
, een JSON-object dat alle sites bevat, wordt doorgegeven aan een while-loop om de bewerkingen voor elke site een voor een uit te voeren.
Het begint met het verzamelen van enkele belangrijke gegevens zoals de site-ID, naam en weergavenaam in variabelen:
while IFS= read -r SITE; do
SITE_ID=$(echo "$SITE" | jq -r '.id')
SITE_NAME=$(echo "$SITE" | jq -r '.name')
SITE_DISPLAY_NAME=$(echo "$SITE" | jq -r '.display_name')
echo "Checking environments for site "$SITE_DISPLAY_NAME"..."
De sitenaam wordt vervolgens samen met de eerder gedefinieerde functie get_site_details_by_name
gebruikt om gedetailleerde informatie over de site op te halen, inclusief alle omgevingen.
SITE_DETAILS=$(get_site_details_by_name "$SITE_NAME")
CLEAN_SITE_DETAILS=$(echo "$SITE_DETAILS" | tr -d 'r' | sed 's/^[^{]*//')
ENVIRONMENTS=$(echo "$CLEAN_SITE_DETAILS" | jq -r '.site.environments[] | "(.id):(.name):(.display_name)"')
De omgevingen worden vervolgens doorlopen om details van elke omgeving op te halen, zoals de ID, naam en weergavenaam:
while IFS= read -r ENV; do
ENV_ID=$(echo "$ENV" | cut -d: -f1)
ENV_NAME=$(echo "$ENV" | cut -d: -f2)
ENV_DISPLAY_NAME=$(echo "$ENV" | cut -d: -f3)
echo "Checking plugins for environment "$ENV_DISPLAY_NAME"..."
Voor elke omgeving haalt het script nu de lijst met plugins op met behulp van de Kinsta API.
PLUGINS_RESPONSE=$(curl -s -X GET "$BASE_URL/sites/environments/$ENV_ID/plugins"
-H "Authorization: Bearer $API_KEY"
-H "Content-Type: application/json")
CLEAN_PLUGINS_RESPONSE=$(echo "$PLUGINS_RESPONSE" | tr -d 'r' | sed 's/^[^{]*//')
Vervolgens controleert het script of de opgegeven plugin in de omgeving bestaat en een update beschikbaar heeft:
OUTDATED_PLUGIN=$(echo "$CLEAN_PLUGINS_RESPONSE" | jq -r --arg PLUGIN_NAME "$PLUGIN_NAME" '.environment.container_info.wp_plugins.data[] | select(.name == $PLUGIN_NAME and .update == "available")')
Als er een verouderde plugin wordt gevonden, logt het script de details en voegt deze toe aan de SITES_WITH_OUTDATED_PLUGIN
array:
if [ ! -z "$OUTDATED_PLUGIN" ]; then
CURRENT_VERSION=$(echo "$OUTDATED_PLUGIN" | jq -r '.version')
UPDATE_VERSION=$(echo "$OUTDATED_PLUGIN" | jq -r '.update_version')
echo "Outdated plugin "$PLUGIN_NAME" found in "$SITE_DISPLAY_NAME" (Environment: $ENV_DISPLAY_NAME)"
echo " Current Version: $CURRENT_VERSION"
echo " Update Version: $UPDATE_VERSION"
SITES_WITH_OUTDATED_PLUGIN+=("$SITE_DISPLAY_NAME:$ENV_DISPLAY_NAME:$ENV_ID:$UPDATE_VERSION")
fi
Zo zien de gelogde details van verouderde plugins eruit:
Outdated plugin "example-plugin" found in "Site ABC" (Environment: Production)
Current Version: 1.0.0
Update Version: 1.2.0
Outdated plugin "example-plugin" found in "Site XYZ" (Environment: Staging)
Current Version: 1.3.0
Update Version: 1.4.0
Vanaf hier voeren we plugin-updates uit voor elke plugin met behulp van zijn endpoint. Het volledige script staat in deze GitHub repository.
Samenvatting
Dit artikel heeft je begeleid bij het maken van een shellscript voor interactie met de Kinsta API.
Neem de tijd om de Kinsta API verder te verkennen – je zult extra functies ontdekken die je kunt automatiseren om taken uit te voeren die zijn afgestemd op jouw specifieke behoeften. Je zou kunnen overwegen om de API te integreren met andere API’s om de besluitvorming en efficiëntie te verbeteren.
Controleer tot slot regelmatig het MyKinsta dashboard voor nieuwe functies die zijn ontworpen om websitebeheer nog gebruiksvriendelijker te maken via de intuïtieve interface.