LoginSignup
0
1

More than 3 years have passed since last update.

ShinobiLayer: CDNキャッシュを明示的にPurgeする方法(slコマンド編)

Last updated at Posted at 2015-03-08

はじめに

前回(http://qiita.com/testnin2/items/3668db3411164b704649)、SoftLayerのCustomer Portalを使ってCDNキャッシュを明示的にPurgeする方法を紹介しましたが、実際の運用を鑑みると、コマンドからできた方が便利そうです。SoftLayerのslコマンドにもcdnのオプションは存在するし、実際に動かしてみよう・・・と思ったらバグを見つけてしまったので、そのデバッグ方法と解決方法も併せて紹介します。

とりあえず実行してみる

まず、sl cdn purgeのヘルプを引いてみると、idとurlが引数になっているようです。

# sl cdn purge --help
usage: sl cdn purge <account> <content_url>... [options]

Purge one or more cached files from all edge nodes

Required:
  account      The CDN account ID to purge content from
  content_url  The CDN URL(s) or CDN CNAME-based URL(s) for the content
                 you wish to cache (can be repeated)

Standard Options:
  --format=ARG            Output format. [Options: table, raw] [Default: table]
  -C FILE --config=FILE   Config file location. [Default: ~/.softlayer]
  --debug=LEVEL           Specifies the debug noise level
                           1=warn, 2=info, 3=debug
  --timings               Time each API call and display after results
  --proxy=PROTO:PROXY_URL HTTP[s] proxy to be use to make API calls
  -h --help               Show this screen

ということで、sl cdn listからcustomer portalに載っているaccount_nameに該当するIDを見つけます。今回は分かりやすいように、customer portalに載っているCDN account nameが11188、CDN IDが14180であるとしましょう。そうすると以下のような出力結果になっているかと思います。

# sl cdn list
:.......:..............:.............:...........................:.......:
:   id  : account_name :     type    :          created          : notes :
:.......:..............:.............:...........................:.......:
: 14180 :    11188     : ORIGIN_PULL : 2014-09-28T23:57:14-07:00 :   -   :
:.......:..............:.............:...........................:.......:

あとは、CDN IDとURLを指定してsl cdn purgeを実行するだけですが。。。

# sl cdn purge 14180 http://11188.http.cdn.softlayer.net/8011188/origin.mysl01.com/cdn/*
SoftLayerAPIError(Client): Function ("purgeContent") is not a valid method for this service

なぬ?invalid method?purgeContentというmethodが無いというようなメッセージにも見えますが、debugコマンドを付けて再度実行してみます。

[root@sing ~]# sl cdn purge 14180 http://11188.http.cdn.softlayer.net/8011188/origin.mysl01.com/cdn/* --debug=3
=== REQUEST ===
POST https://api.service.softlayer.com/xmlrpc/v3.1/SoftLayer_Network_ContentDelivery_Account
{'Content-Type': 'application/xml', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'User-Agent': 'SoftLayer Python v3.3.1'}
<?xml version='1.0'?>
<methodCall>
<methodName>purgeContent</methodName>
<params>
<param>
<value><struct>
<member>
<name>headers</name>
<value><struct>
<member>
<name>authenticate</name>
(以下略)

うん、たしかにpurgeContentというmethodを実行しているね、と思いAPI Referenceを見てみます。すると、、、うん、purgeContentなんてmethodは存在しないね、確かに。。。purgeCacheだよ。。と、若干脱力しましたが、コードの修正にかかりましょう。
http://sldn.softlayer.com/reference/services/SoftLayer_Network_ContentDelivery_Account
http://sldn.softlayer.com/reference/services/SoftLayer_Network_ContentDelivery_Account/purgeCache

purgeCache.jpg

SLコマンドソースの修正

CDNなので、cdnという名前のソースを探します。

# locate cdn
/usr/lib/python2.6/site-packages/SoftLayer/CLI/modules/cdn.py
/usr/lib/python2.6/site-packages/SoftLayer/CLI/modules/cdn.pyc
/usr/lib/python2.6/site-packages/SoftLayer/managers/cdn.py
/usr/lib/python2.6/site-packages/SoftLayer/managers/cdn.pyc

/usr/lib/python2.6/site-packages/SoftLayer/managers/cdn.pyにて、purgeContentとなっている部分を、purgeCacheに修正します。

# vi /usr/lib/python2.6/site-packages/SoftLayer/managers/cdn.py
(135行目前後)
        for i in range(0, len(urls), MAX_URLS_PER_PURGE):
            #result = self.account.purgeContent(urls[i:i + MAX_URLS_PER_PURGE],
            result = self.account.purgeCache(urls[i:i + MAX_URLS_PER_PURGE],
                                               id=account_id)
            if not result:
                return result

再実行

今度はエラーが発生せずにうまく行きます。コマンドを実行しても何も結果は返ってきませんが、1-2分もするとキャッシュが消えたことを確認できます。

# sl cdn purge 14180 http://11188.http.cdn.softlayer.net/8011188/origin.mysl01.com/cdn/*
# echo $?
0

終わりに

多分、昔はpurgeContentという名前だったんだろうなぁと思いながら、こんな基本的なバグが見つかっていないなんて結局世界中で誰も使っていないんだろうかと思ってしまったり。。。あとでissueリストに載せるか、pull request投げておこう。。。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1