From 53ab67f3d2bf93f1871d405eecf64927dfaf0fdb Mon Sep 17 00:00:00 2001 From: Yohei Yasukawa Date: Fri, 5 Sep 2025 16:12:34 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Ubuntu=20Server=E3=82=A2=E3=83=BC?= =?UTF-8?q?=E3=82=AB=E3=82=A4=E3=83=96=E9=81=B8=E6=8A=9E=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=A8server:status=E3=82=BF=E3=82=B9=E3=82=AF?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 問題: - 間違ったアーカイブ(CData Sync)が選択されSSH接続できなかった - 正規表現が不適切でUbuntuを含む全てのアーカイブがマッチしていた 修正内容: 1. アーカイブ選択ロジックの修正 - 正規表現を '^Ubuntu Server' に変更 - breakを追加して最初にマッチしたアーカイブを使用 2. デバッグ機能の追加 - VERBOSE環境変数でデバッグログを有効化 - disk/config APIの詳細ログを追加 3. Rakeタスク追加 - rake server:status[サーバー名] でサーバー状態確認 テスト結果: - SSH接続成功を確認(nc -vz 133.242.227.219 22) --- Rakefile | 16 ++++++++++++++++ scripts/deploy.rb | 6 +++++- scripts/sakura_server_user_agent.rb | 22 ++++++++++++---------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Rakefile b/Rakefile index 4e70f9f..20ddbbc 100644 --- a/Rakefile +++ b/Rakefile @@ -417,6 +417,22 @@ namespace :server do end end + # ======================================== + # サーバー状態確認タスク + # ======================================== + desc "サーバーの詳細状態を確認" + task :status, [:server_name] => [:check_api_credentials] do |t, args| + server_name = args[:server_name] + + unless server_name + abort "❌ エラー: サーバー名が必要です\n" \ + "使い方: rake server:status[coderdojo-japan]" + end + + puts "🔍 サーバー状態を確認中: #{server_name}" + sh "ruby scripts/utils/check_server_status.rb #{server_name}", verbose: false + end + # ======================================== # 個別サーバー作成タスク(テスト用) # ======================================== diff --git a/scripts/deploy.rb b/scripts/deploy.rb index 739b0d2..dabf74b 100644 --- a/scripts/deploy.rb +++ b/scripts/deploy.rb @@ -147,12 +147,14 @@ def perform_init_params zone: "29001", # サンドボックス zone_id: "tk1v", packet_filter_id: '112900927419', # See https://secure.sakura.ad.jp/cloud/iaas/#!/network/packetfilter/. + verbose: ENV['VERBOSE'] == 'true' # デバッグモード } else { zone: "31002", # 石狩第二 zone_id: "is1b", # 石狩第二 packet_filter_id: '112900922505', # See https://secure.sakura.ad.jp/cloud/iaas/#!/network/packetfilter/. + verbose: ENV['VERBOSE'] == 'true' # デバッグモード } end end @@ -167,9 +169,11 @@ def initial_archive_id # https://manual.sakura.ad.jp/cloud/server/os-packages/archive-iso/list.html puts "- Name: #{arch['Name']}" # 通常版Ubuntu 24.04を使用(disk/config APIでSSH鍵設定、@notesでスタートアップスクリプト実行) - if /ubuntu/i =~ arch['Name'] && /24\.04/i =~ arch['Name'] && !(/cloudimg/i =~ arch['Name']) then + # "Ubuntu Server"で始まるものだけを対象にして、CData Syncなどを除外 + if /^Ubuntu Server/i =~ arch['Name'] && /24\.04/i =~ arch['Name'] && !(/cloudimg/i =~ arch['Name']) then archiveid = arch['ID'] selected_name = arch['Name'] + break # 最初にマッチしたものを使用 end end diff --git a/scripts/sakura_server_user_agent.rb b/scripts/sakura_server_user_agent.rb index 7e8b04c..ad40ee8 100644 --- a/scripts/sakura_server_user_agent.rb +++ b/scripts/sakura_server_user_agent.rb @@ -324,7 +324,7 @@ def stop_server(server_id) private def _put_ssh_key(disk_id) - # disk/config APIを使用してSSH鍵を設定 + # disk/config APIを使用してSSH鍵とスタートアップスクリプトを設定 body = { SSHKey: { PublicKey: @pubkey @@ -332,20 +332,22 @@ def _put_ssh_key(disk_id) Notes: @notes } puts "DEBUG: Setting SSH key via disk/config API" if @verbose - send_request('put',"disk/#{disk_id}/config",body) + puts "DEBUG: Notes being set: #{@notes.inspect}" if @verbose + puts "DEBUG: Full body for disk/config: #{body.inspect}" if @verbose + result = send_request('put',"disk/#{disk_id}/config",body) + puts "DEBUG: disk/config API response: #{result.inspect}" if @verbose && result + result end def _copying_image - # SSH鍵はdisk/config APIで設定済み - # スタートアップスクリプトはサーバー起動時に指定する必要がある + # SSH鍵とスタートアップスクリプトはdisk/config APIで設定済み + # /server/{id}/power APIはパラメータなしで呼び出す(Notesパラメータは無視される) - puts "DEBUG: Starting server with startup script ID: #{@notes.first[:ID]}" if @verbose + puts "DEBUG: Starting server (startup script already embedded in disk)" if @verbose - # サーバー起動時にスタートアップスクリプトIDを指定 - body = { - Notes: @notes - } - send_request('put',"server/#{@server_id}/power", body) + # サーバー起動(パラメータなし) + # Note: スタートアップスクリプトはdisk/config APIで既に設定済み + send_request('put',"server/#{@server_id}/power", nil) rescue => exception puts exception