0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StylezAdvent Calendar 2024

Day 17

PowerDNSのAuthorityサーバーのレコードをYAML形式でバックアップする

Last updated at Posted at 2024-12-16

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

PowerDNSをいろいろセットアップしたりしてきました。

理由は、Kubernetesクラスターから参照されるDNSサーバーを作りたい。
なぜなら、ExternalDNSで自動的にIngressからレコードを登録させたいから。
なのですが、何だか随分と遠くまで来た気がします(遠い目)。

さて、AnsibleでZoneとレコードを設定できて、バンザーイと思ったのですが意外な伏兵にやられてしまいました。Ansibleのkpfleming.powerdns_authは、Zone単位でしか冪等性を保てないということです。

どういうことか?というと、kpfleming.powerdns_authでレコードを登録します。この時に、playbook.ymlに必要なレコードを登録しておけば、問題ありません。

もしレコードが増えても、playbook.ymlに必要なレコードを追加して、Ansibleを実行するだけです。何の問題もありません。

しかし、ここでPowerDNSサーバーにKubernetesクラスターのExternalDNSで自動的に登録されたDNSレコードがあったとしたらどうでしょうか?

「え?別に問題ないでしょ?Playbookファイルに登録されたレコードだけ追加されるんだから」と思うかもしれません。

ここで出てくる問題が、「kpfleming.powerdns_authが、Zone単位でしか冪等性を保てない」という部分です。

上記の問題のために、PowerDNSのZoneとレコードをAnsibleで設定する #PowerDNS-Admin - Qiita では、Playbookファイルのゾーンを更新するために、以前のZoneファイルを削除しています。

雑に図示すると以下のような感じです。

image.png

Ansibleでレコードを追加しようとすると、そこで管理されていないレコード(ExternalDNSで自動的に登録されたレコード)が削除されるという鬼畜な状況になります。

じゃあ、どうすればいいかという話になるのですが、どうしようもないのでバックアップする方法をとります。

image.png

1. PowerDNSのレコードを取得して、yamlファイルに保存するスクリプト

Ruby言語で作りました。
Gistに保存したので、以下からダウンロードしてください。

実行すると

backup_{zone名}.yaml

ファイルが保存されます。

次工程のAnsibleのタスクに渡したいので必要な情報しか取得しないようになっています。

2. まとめ

こちらのRubyスクリプトは生成AIで作ったのですが、ここまで自然言語でスクリプトを組めるのなら、もうローコードツールとか不要じゃね?と思うレベルです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?