LoginSignup
7
8

More than 5 years have passed since last update.

さくらのクラウドからクラウドDNSが出てたので、fog-sakuracloudにDNS操作を追加した

Posted at

クラウドDNS | さくらのクラウドニュース

クラウド共用ライブラリのfogに、なんだったかのイベント向けで作ったさくらのクラウド向け実装fog-sakuracloudというGemを趣味で保守してます。
(当時目線で)世界のクラウド見本市のようなfog対応プロバイダ一覧に、日本のが無いなーという程度の理由で追加したはず。

fogでクラウドDNS

この記事で、fog-sakuracloudはv1.3.1です。クラウドDNSが無料のうちに追加しました。

ゾーン一覧

クラウドDNSは必要な操作が少ないので、fogでまあまあ楽に管理できますね。

require 'fog/sakuracloud'

## FogのDNSサービスを初期化
dns = Fog::DNS::SakuraCloud.new(
  :sakuracloud_api_token => 'YOUR_API_TOKEN',
  :sakuracloud_api_token_secret => 'YOUR_TOKEN_SECRET'
)

----

## ゾーン一覧を取得
> dns.zones

=> [  <Fog::DNS::SakuraCloud::Zone
    id="112700801016",
    name="sawanoboly4.net",
    description=nil,
    status={"Zone"=>"sawanoboly4.net", "NS"=>["ns1.gslb2.sakura.ne.jp", "ns2.gslb2.sakura.ne.jp"]},
    settings={"DNS"=>{"ResourceRecordSets"=>nil}},
    tags=[]
  >,
   <Fog::DNS::SakuraCloud::Zone
    id="112700801019",
    name="sawanoboly5.net",
    description=nil,
    status={"Zone"=>"sawanoboly5.net", "NS"=>["ns1.gslb2.sakura.ne.jp", "ns2.gslb2.sakura.ne.jp"]},
    settings={"DNS"=>{"ResourceRecordSets"=>nil}},
    tags=[]
  >]

(このstatusやsettingsのネスト、fogではわりと邪魔なので、ホンマに階層いるんかいなと思いつつ。。)ゾーン一覧が取れました。

ゾーン単品取得して、更新

zonesはArrayなので、selectやらfindも使えます。一応getでID指定できるのでそれで単品を取得します。

> zone = dns.zones.get('112700801016')
=>   <Fog::DNS::SakuraCloud::Zone
    id="112700801016",
    name="sawanoboly4.net",
    description=nil,
    status={"Zone"=>"sawanoboly4.net", "NS"=>["ns1.gslb2.sakura.ne.jp", "ns2.gslb2.sakura.ne.jp"]},
    settings={"DNS"=>{"ResourceRecordSets"=>nil}},
    tags=[]
  >

ZoneやNS、ResourceRecordSetsにはちょっと便利なゲッターが使えます。

> zone.zone
=> "sawanoboly4.net"

> zone.nameservers
=> ["ns1.gslb2.sakura.ne.jp", "ns2.gslb2.sakura.ne.jp"]

ではResourceRecordSetsを登録してみましょ。

> zone.rr_sets = [{"Name"=>"mail", "Type"=>"A", "RData"=>"192.168.1.5"}]
=> [{"Name"=>"mail", "Type"=>"A", "RData"=>"192.168.1.5"}]

> zone.save
[fog][WARNING] Update DNS Zone 112700801016
=> true

設定が保存できているか確認します。

> zone.reload # reloadはAPIから再取得。
=>   <Fog::DNS::SakuraCloud::Zone
    id="112700801016",
    name="sawanoboly4.net",
    description=nil,
    status={"Zone"=>"sawanoboly4.net", "NS"=>["ns1.gslb2.sakura.ne.jp", "ns2.gslb2.sakura.ne.jp"]},
    settings={"DNS"=>{"ResourceRecordSets"=>[{"Name"=>"mail", "Type"=>"A", "RData"=>"192.168.1.5"}]}},
    tags=[]
  >

rr_setの変更用ヘルパーはZone#rr_sets=しか実装していないので、Arrayらしく操作するならsettings['DNS']['ResourceRecordSets']を直接触ってOK。

> zone.settings['DNS']['ResourceRecordSets'] << {"Name"=>"www", "Type"=>"A", "RData"=>"192.168.1.2"}
=> [{"Name"=>"mail", "Type"=>"A", "RData"=>"192.168.1.5"}, {"Name"=>"www", "Type"=>"A", "RData"=>"192.168.1.2"}]

> zone.save
[fog][WARNING] Update DNS Zone 112700801016
=> true

その他の操作はfogサイトのDocumentationにまとめるようにしています。

7
8
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
7
8