LoginSignup
3
3

More than 5 years have passed since last update.

IDCFクラウドのDNSをAnsibleで管理する

Posted at

個人で取ったドメインのネームサーバーをIDCFのDNSサービスで管理しようと考えた時に、ちょっと困ったことがありました。

Ansibleが使えない?

業務から個人ネタまでインンフラ系の構成管理にAnsibleを使っている身としては、やっぱりドメイン周りも構成管理に組み込みたいわけで。
DNSサービス系のサービスでAnsibleのモジュールがあるものだとRoute53は当たり前のようにあるのですが、せっかくなのでIDCFクラウドを使ってみたいという感覚がありました。

で、改めて振り返ると、

  • AnsibleのモジュールはPython書ければ作れそうだし、ガイドラインが結構丁寧
  • IDCFクラウドはAPIが公開されているので、ちゃんとHTTPリクエスト組めば問題なく取り扱える
  • IDCFクラウドはベースがCloudStackではあるがDNSはどうも違うっぽい(?未確認)

ということなので、モジュールを自作するネタとしてはちょうど良いため、せっかくなので作ってみることにしました。

こんな感じに動く

playbook.yml
- vars:
    api_key: 'YOUR_IDCF_API_KEY'
    secret_key: 'YOUR_IDCF_SECRET_KEY'
  tasks:
    - name: ゾーンの登録
      idcd_dns_zone:
        idcf_api_key: '{{ api_key }}'
        idcf_secret_key: '{{ secret_key }}'
        zone: 'example.com'
    - name: レコードを登録する
      idcd_dns_record:
        idcf_api_key: '{{ api_key }}'
        idcf_secret_key: '{{ secret_key }}'
        zone: 'example.com'
        name: '{{ item.name }}'
        type: '{{ item.type }}'
        content: '{{ item.content }}'
      with_items:
        - name: 'www'
          type: 'A'
          content: '127.0.0.1'
        - name: 'blog'
          type: 'CNAME'
          content: 'github.io'

現時点ではゾーンの登録/削除/更新と登録ゾーンに対する簡単なレコード登録/更新/削除ができるようになります。(ドメイン認証あたりは未実装)

モジュール作成振り返り

モジュールスクリプト自体は作成はさほど難しくない

モジュール自体は割と何で書いても動くのでさほど苦労しません。
特にAnsibleのドキュメントにはモジュールを開発する際に気をつけた方ががいいことや、ベストプラクティス的な情報が載っており、Pythonで書く場合はAnsibleの共通ライブラリも使えるため綺麗なコードが書けます。というかAnsibleModuleクラスが凄まじく便利

未来を夢想しながら書いていたら、ドキュメント部分が大半を占めていたのも特徴的でした。

モジュールのコードはそれで完結させる必要がある

モジュール実行時は実行先にモジュールをそのまま転送して実行するという挙動上、Pythonで書くモジュールはそれ単体(+ansible.module_utils.*)とpython標準のみで動作するようにしないといけないようです。

例えば、今回はidcd_dns_zone,idcf_dns_zone_facts,idcf_dns_recordというモジュールを作ったのですが、APIをコールする部分は基本的に同じなのにもかかわらずClientクラスを作って全モジュールにコピペするような運用になりました。
オフィシャル登録されれば共通モジュールの置き場がありそうなのですが、そこまでする気力がまだないので...

どこに置いてもらうか?

基本的に自作モジュールは、Playbook実行時の./libraryにおけば勝手に認識してくれています。ので、その通りにおいてもらえれば何の問題もないのですが、自作モジュールを大量に取り扱う時に死ねそう(そんなことはない気もするけれど)

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