Skip to content

Commit afec9fa

Browse files
authored
Merge pull request #260 from coderdojo-japan/feat-individual-server-creation
feat: 個別サーバー作成用のRakeタスクとサーバー状況確認タスクのメッセージ改善
2 parents 8592ec5 + 92dc47d commit afec9fa

16 files changed

+675
-81
lines changed

Rakefile

Lines changed: 109 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ require 'net/http'
66
require 'uri'
77
require 'csv'
88

9+
# 表示用の定数
10+
SEPARATOR_WIDTH = 60 # セパレーター行の幅
11+
912
# Minitestタスクの定義
1013
Rake::TestTask.new(:test) do |t|
1114
t.libs << "test"
@@ -49,10 +52,10 @@ task :default => :test
4952
desc "利用可能なDojoPaaS管理タスクをすべて表示"
5053
task :default do
5154
puts "\n🔧 DojoPaaS 管理タスク"
52-
puts "=" * 50
55+
puts "=" * SEPARATOR_WIDTH
5356
puts "'rake -T' ですべての利用可能なタスクを確認"
5457
puts "'rake -D [タスク名]' で詳細な説明を表示"
55-
puts "=" * 50
58+
puts "=" * SEPARATOR_WIDTH
5659
sh "rake -T"
5760
end
5861

@@ -127,7 +130,7 @@ namespace :server do
127130

128131
puts "✅ 有効なIPアドレス: #{validated_ip_str}"
129132
puts "🔍 サーバー情報を検索中..."
130-
puts "-" * 50
133+
puts "-" * SEPARATOR_WIDTH
131134

132135
# 検証済みIPでinitialize_server.rbスクリプトを実行(コマンドエコーを抑制)
133136
sh "ruby scripts/initialize_server.rb --find #{validated_ip_str}", verbose: false
@@ -153,7 +156,7 @@ namespace :server do
153156

154157
puts "📋 Issue処理中: #{issue_url}"
155158
puts "🔍 サーバー情報を抽出中..."
156-
puts "-" * 50
159+
puts "-" * SEPARATOR_WIDTH
157160

158161
sh "ruby scripts/initialize_server.rb --find #{issue_url}", verbose: false
159162
end
@@ -171,7 +174,7 @@ namespace :server do
171174
end
172175

173176
puts "🔍 サーバー名で検索: #{name}"
174-
puts "-" * 50
177+
puts "-" * SEPARATOR_WIDTH
175178

176179
sh "ruby scripts/initialize_server.rb --find #{name}", verbose: false
177180
end
@@ -319,25 +322,62 @@ namespace :server do
319322
desc "現在稼働中のサーバー一覧を表示"
320323
task :list do
321324
require_relative 'scripts/sakura_server_user_agent'
322-
325+
require 'dotenv/load'
326+
323327
puts "📋 サーバー一覧を取得中..."
324328
puts "データソース: #{SakuraServerUserAgent::INSTANCES_CSV_URL}"
325-
puts "-" * 50
326-
329+
puts "-" * SEPARATOR_WIDTH
330+
327331
begin
328332
uri = URI(SakuraServerUserAgent::INSTANCES_CSV_URL)
329333
response = Net::HTTP.get_response(uri)
330-
334+
331335
if response.code == '200'
332336
# エンコーディングを明示的に設定してCSVを解析(無効な文字を安全に処理)
333337
response.body.force_encoding('UTF-8').scrub('?')
334338
csv_data = CSV.parse(response.body, headers: true)
339+
340+
# APIクライアントを初期化(ステータス確認用)
341+
server_statuses = {}
342+
if ENV['SACLOUD_ACCESS_TOKEN'] && ENV['SACLOUD_ACCESS_TOKEN_SECRET']
343+
begin
344+
# デフォルトパラメータ(石狩第二)が自動的に使用される
345+
client = SakuraServerUserAgent.new
346+
servers_data = client.get_servers()
347+
if servers_data && servers_data['Servers']
348+
servers_data['Servers'].each do |server|
349+
server_statuses[server['Name']] = server['Instance']['Status']
350+
end
351+
end
352+
rescue
353+
# エラーは無視してステータスなしで続行
354+
end
355+
end
335356

336357
puts "📊 サーバー一覧(#{csv_data.length}台):"
337358
puts ""
338-
359+
339360
csv_data.each do |row|
340-
puts " 🖥️ #{row['Name']}"
361+
server_name = row['Name']
362+
status = server_statuses[server_name]
363+
364+
# ステータスに応じた絵文字と表示を設定
365+
status_display = if status
366+
case status
367+
when 'up'
368+
" (✅ up)"
369+
when 'down'
370+
" (⏸️ down)"
371+
when 'cleaning'
372+
" (🧹 cleaning)"
373+
else
374+
" (❓ #{status})" # 予期しないステータスの場合
375+
end
376+
else
377+
"" # APIが利用できない場合は何も表示しない
378+
end
379+
380+
puts " 🖥️ #{server_name}#{status_display}"
341381
puts " IPアドレス: #{row['IP Address']}" # スペースを追加
342382
puts " 説明: #{row['Description']}" if row['Description']
343383
puts ""
@@ -359,6 +399,15 @@ namespace :server do
359399
end
360400
puts ""
361401

402+
# ステータス表示についての注記
403+
if !ENV['SACLOUD_ACCESS_TOKEN'] || !ENV['SACLOUD_ACCESS_TOKEN_SECRET']
404+
puts "ℹ️ 注: API認証情報が設定されていないため、サーバーステータス(up/down)は表示されていません"
405+
puts " ステータスを表示するには、SACLOUD_ACCESS_TOKEN と SACLOUD_ACCESS_TOKEN_SECRET を設定してください"
406+
elsif server_statuses.empty?
407+
puts "ℹ️ 注: API接続エラーのため、サーバーステータス(up/down)を取得できませんでした"
408+
end
409+
puts ""
410+
362411
else
363412
abort "❌ エラー: サーバー一覧の取得に失敗しました (HTTP #{response.code})"
364413
end
@@ -367,6 +416,55 @@ namespace :server do
367416
abort "❌ エラー: #{e.message}"
368417
end
369418
end
419+
420+
# ========================================
421+
# 個別サーバー作成タスク(テスト用)
422+
# ========================================
423+
desc "指定したサーバーを個別に作成(テスト用)"
424+
task :create, [:server_name] => [:check_api_credentials] do |t, args|
425+
server_name = args[:server_name]
426+
427+
unless server_name
428+
abort "❌ エラー: サーバー名が必要です\n" \
429+
"使い方: rake server:create[coderdojo-japan]\n" \
430+
"注意: servers.csvに登録されているサーバー名を指定してください"
431+
end
432+
433+
puts "="*SEPARATOR_WIDTH
434+
puts "🚀 DojoPaaS 個別サーバー作成"
435+
puts "="*SEPARATOR_WIDTH
436+
puts ""
437+
puts "サーバー名: #{server_name}"
438+
puts ""
439+
440+
# deploy.rbのCoderDojoSakuraCLIクラスを使用(DRY原則)
441+
require_relative 'scripts/deploy'
442+
443+
cli = CoderDojoSakuraCLI.new([])
444+
success = cli.create_single_server(server_name)
445+
446+
if success
447+
puts ""
448+
puts "="*SEPARATOR_WIDTH
449+
puts "✅ サーバー作成プロセス完了"
450+
puts "="*SEPARATOR_WIDTH
451+
puts ""
452+
puts "【次のステップ】"
453+
puts "1. SSHで接続確認:"
454+
puts " ssh ubuntu@<IPアドレス>"
455+
puts ""
456+
puts "2. スタートアップスクリプトの実行状況確認:"
457+
puts " ssh ubuntu@<IPアドレス> 'sudo tail -f /var/log/cloud-init-output.log'"
458+
puts ""
459+
else
460+
puts ""
461+
puts "="*SEPARATOR_WIDTH
462+
puts "❌ サーバー作成に失敗しました"
463+
puts "="*SEPARATOR_WIDTH
464+
exit 1
465+
end
466+
end
467+
370468
end
371469

372470
# ヘルパーメソッド(将来の拡張用に保持)

bin/deploy.sh

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,5 @@ else
2020
COMMIT_MSG="Deploy from actions"
2121
fi
2222

23-
# 追加されたサーバー情報を取得(オプション)
24-
NEW_SERVERS=$(git diff --cached instances.csv | grep '^+' | grep -v '^+++' | cut -d',' -f1 | sed 's/^+//' | head -3 | paste -sd ', ' || echo "")
25-
26-
if [ -n "$NEW_SERVERS" ]; then
27-
COMMIT_MSG="$COMMIT_MSG - Added: $NEW_SERVERS"
28-
fi
29-
3023
git commit --quiet -m "$COMMIT_MSG"
3124
git push --force --quiet "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}" main:gh-pages

0 commit comments

Comments
 (0)