Skip to content

Instantly share code, notes, and snippets.

@watsuyo
Last active October 12, 2023 11:38
Show Gist options
  • Save watsuyo/85efa9ff801362704cbf48eaa5a264f8 to your computer and use it in GitHub Desktop.
Save watsuyo/85efa9ff801362704cbf48eaa5a264f8 to your computer and use it in GitHub Desktop.
Cloudflare Workers Route を作成、削除する shell script。API Token、Zone ID、Worker、Worker 名 、Route パターンの入力をユーザーに求める
#!/bin/bash
# カラーコード
GREEN='\033[0;32m' # 緑
RED='\033[0;31m' # 赤
NC='\033[0m' # リセット
# プロンプトでユーザーからの入力を収集
read -p "API Token を入力して下さい: " YOUR_API_KEY
read -p "Zone ID を入力して下さい: " ZONE_ID
read -p "Worker 名 を入力して下さい: " Worker
read -p "Route パターン を入力して下さい: " Route
# ルート一覧を取得
routes=$(curl --request GET \
--url "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes" \
--header "Authorization: Bearer $YOUR_API_KEY" \
--header 'Content-Type: application/json')
# 重複したルートを検出
duplicate_route_id=$(echo "$routes" | jq -r --arg Route "$Route" --arg Worker "$Worker" '.result[] | select(.pattern == $Route and .script == $Worker) | .id')
if [ -n "$duplicate_route_id" ]; then
# 重複したルートが見つかった場合
printf "${RED}重複したルートが見つかりました。ROUTE_ID: $duplicate_route_id${NC}\n"
# ルートを削除するかどうかの質問
read -p "既存の Workers Route を削除しますか?(yes): " delete_route
if [ "$delete_route" == "yes" ]; then
# 重複したルートを削除するCurlコマンドを実行
delete_response=$(curl --request DELETE \
--url "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes/$duplicate_route_id" \
--header "Authorization: Bearer $YOUR_API_KEY" \
--header 'Content-Type: application/json')
echo "$delete_response"
printf "${GREEN}Workers Route が削除されました。${NC}\n"
else
printf "${RED}ルートの削除をキャンセルしました。${NC}\n"
fi
else
# 新しい Workers Route を作成
read -p "新しい Workers Route を作成しますか?(yes): " create_route
if [ "$create_route" == "yes" ]; then
# ルートを作成するCurlコマンドを実行
create_response=$(curl --request POST \
--url "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes" \
--header "Authorization: Bearer $YOUR_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"pattern": "'"$Route"'",
"script": "'"$Worker"'"
}')
echo "$create_response"
IS_SUCCESS=$(echo "$create_response" | jq -r '.success')
if [ "$IS_SUCCESS" == "true" ]; then
ROUTE_ID=$(echo "$create_response" | jq -r '.result.id')
printf "${GREEN}新しい Workers Route が作成されました。ROUTE_ID: $ROUTE_ID${NC}\n"
# 新しい Workers Route が作成されたら、削除の会話に進む
read -p "新しい Workers Route を削除しますか?(yes): " delete_route
if [ "$delete_route" == "yes" ]; then
# 新しい Workers Route を削除するCurlコマンドを実行
delete_response=$(curl --request DELETE \
--url "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/workers/routes/$ROUTE_ID" \
--header "Authorization: Bearer $YOUR_API_KEY" \
--header 'Content-Type: application/json')
echo "$delete_response"
printf "${GREEN}新しい Workers Route が削除されました。${NC}\n"
else
printf "${RED}ルートの削除をキャンセルしました。${NC}\n"
fi
else
printf "${RED}新しい Workers Route の作成に失敗しました。 レスポンスの内容を確認して下さい。${NC}\n"
fi
else
printf "${RED}新しい Workers Route の作成をキャンセルしました。${NC}\n"
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment