Twitterのほうで呟いていたものを整理しました。「諦めて手動で移行しろ」←結論。
問題
ConoHaでメモリ512MB、SSD20GBプランが新設されました。既存の最安プラン(メモリ1GB、SSD50GB)より300円弱お安くなります。
以前からConoHaの1GBプランでOwnCloudのアプリケーションイメージをロードし、データ格納先としては同じくConoHaのオブジェクトストレージを使用していたのですが、この場合フロントエンドとなるVPS側はほとんどディスクを使用しません。ルートディレクトリからの実測で9GBくらいです。
これで50GBはもったいないし、とはいえリアルタイム同期させている都合上開発サーバー等にするのは扱いが面倒になるので、新プランのSSD20GBに縮小移行しようと思ったわけです。
で、VPS上で通常シャットダウン→ConoHaコントロールパネルで手動バックアップ→新しいVPSを512MBプランで選択、イメージタイプ:「保存イメージ」で作成しようと思ったのですが…イメージのリストに出てきません。
1GBプランで選択すると出てくるので、モノとしては存在する様子。というか以前別の目的でバックアップした開発環境VPSのイメージもリストに出てこない。
調査
挙動からして何かフィルタリングされているように見えたので、 ConoHa API 側からつつけば理由が分かるかと調査を開始。
以前開発した ConoHaでメール送信するツール でAPIアクセスの基本部分は出来ていたので、これを改造して利用しました。…というかこのアクセスライブラリ部分は切り分けて公開しましょうかね。OpenStackクライアントライブラリだとConoHa独自(?)のメールサーバー機能とか、使えない様子だし。
以前作ったコード に機能を追加。
def list_image( self ): try: response = urlopen( urllib2.Request( urljoin( self.imageservice_endpoint(), '/v2/images' ), None, self.auth_headers ) ) self.http_status = response.getcode() if self.success(): infos = json.loads( response.read() ) image_info = {} for info in infos['images']: image_info[info['name']] = info response.close() return image_info else: response.close() return self.http_status except HTTPError as err: self.http_status = err.code return self.http_status else: response.close()
さらに呼び出し側も改造。
from conoha import ConoHa import sys import json def exit_if_failure( conoha ): if not conoha.success(): print( 'HTTP_STATUS: ' + str( conoha.http_status() ) ) exit( 1 ) with open( sys.argv[1], 'r' ) as config_reader: config = json.loads( config_reader.read() ) conoha = ConoHa( config['identity_url'], config['user_agent'] ) connect_response = conoha.connect( config['username'], config['password'], config['tenant_id'] ) exit_if_failure( conoha ) image_list = conoha.list_image() for name,image_info in image_list.items(): if 'private' == image_info['visibility']: for key in image_info.keys(): print( key + ':' + str(image_info[key]) ) print( "\n" )
結果(だめでしたー)
APIの「 イメージ一覧を取得 」でチェックしてみると、「min_disk:50」となっています。
$ python list_image.py config.json container_format:ovf min_ram:0 updated_at:2016-11-02T01:13:15Z file:/v2/images/XXXXXXXXXX/file owner:YYYYYYYYYY id:XXXXXXXXXX size:35246112768 self:/v2/images/XXXXXXXXXX disk_format:qcow2 direct_url:file:///var/lib/glance/images/YYYYYYYYYY/XXXXXXXXXX app:ownCloud-8-64bit schema:/v2/schemas/image status:active tags:[] hw_qemu_guest_agent:yes visibility:private min_disk:50 instance_uuid:ZZZZZZZZZZ name:owncloud checksum:ed2798eb07530bc79aa073c6e26f6e76 display_order:280 protected:False os_type:lin created_at:2016-11-02T01:08:03Z
(他のバックアップ情報は割愛、IDの類はマスク)
同じAPIから取得できる、ConoHa提供の既存OSテンプレートは概ね「min_disk:20」、一部のみ「min_disk:50」となっているので、どうやらこれが、イメージをロードするVPSが最低限持つべきディスク容量のようです。
…ただ、メモリ512MBプランでディスク容量を「SSD 220GB」にしても表示できないので、微妙に別の問題が絡んでいそうな気もします。
あと何故か実測9GBしか使用していないOwnCloudフロントエンドを手動バックアップすると32.83GBになるので、どちらにしてもこのままではSSD 20GBにロードすることはできないのですが。
min_diskを20に出来れば、あとはsizeが20GB以下ならロードできそうな気もするのですが、APIを見る限りこの情報を書き換える機能は無い様子なので、まあ詰みましたかね、と。
後はAPI側のVPS構築機能でメモリ512MBプラン+min_disk:50 のイメージを指定した場合にどこかでチェックされているか否か、というポイントがあるのですが…さて。