【SELECK掲載記念】AnsibleでPartitionを切る!

追記

さくらのクラウドについて取材していただいた記事も公開されました!
合わせてご覧ください!!

さくらのクラウドで「尖ったインフラ環境」を構築。カスタマイズに強い、その実力とは | SELECK


本編

先日「SELECK(セレック)」様にAnsibleの活用事例をインタビューいただきました。

seleck.cc

素晴らしい記事にしていただいたのでせっかくなら何かネタになりそうな実例をご紹介したいと考えた結果(?)、バッドノウハウが詰まったパーティションの切り方をご紹介したいと思います!

Googleグループでも話題になっていますが、本記事を書いている時点ではAnsibleにpartitionを切るモジュールはないようです。
しかしながら物理サーバーや場合によってはクラウドサーバーでもパーティションを切りたいケースは当然あります。

HDD/SSDにパーティションを切る

さすがに会社のプライベートリポジトリからPlaybookを持ってくるわけにもいかないので、今回は近いものとして私の個人的なPlaybookをご紹介します。

github.com

なお、実際のギョウムでは優秀な若者が改善したPlaybookが使われていることを申し添えておきます。

gdiskfdisk ではなく parted を使うとAnsibleでも比較的簡単にパーティションを切ることができます。
いつ何時数十台のサーバーで同時にパーティションを切る必要が生じるとも限りませんので覚えておいて損はないと思います!!

  • GPTパーティションテーブルを作る
- name: "Create partition table"
  command: "parted --script --align optimal /dev/vda -- mklabel gpt"
  • 各パーティションを切る

ここでは、
第1パーティションはGRUB2用にVFATで、
第2パーティションはSWAP用に、
第3パーティションはOS用に切ることにします。

GRUB2用のパーティションはFAT32で4MiBもあれば十分です。フォーマットしなくても使える気がします。
OS用の第3パーティションは空き領域を全て割り当てるため最後の引数に -1 を渡しています。

- name: "Create BIOS boot partition"
  command: "parted --script --align optimal /dev/vda -- mkpart bios_boot fat32 1MiB 5MiB"

- name: "Set BIOS boot partition"
  command: "parted --script --align optimal /dev/vda -- set 1 bios_grub on"

- name: "Create filesystem for grub2"
  filesystem: fstype=vfat dev=/dev/vda1

- name: "Create swap partition"
  command: "parted --script --align optimal /dev/vda -- mkpart swap linux-swap 5MiB 4GiB"

- name: "Create filesystem for swap"
  command: mkswap /dev/vda2

- name: "Create root partition"
  command: "parted --script --align optimal /dev/vda -- mkpart linux btrfs 4GiB -1"

- name: "Create filesystem for /"
  filesystem: fstype=btrfs dev=/dev/vda3

対話式インタフェースがメインの gdiskfdisk と違って parted ならAnsibleのcommandモジュールで扱いやすいですね!
あとはパーティションサイズの指定をもう少し楽にできると尚良しです。

なお、この方法では「冪等性?なにそれおいしいの?」になってしまいます。
filesystemモジュールはあるので、"partition module"みたいなのが提供されるとうれしいですね!
どなたか作ってください!!

さいごに

SELECKではAnsibleを含めた色々なツールやサービスの事例を知ることができておすすめです!!(宣伝)

数百台のサーバー構成を「Ansible」で管理。大規模DSPシステムを支える技術とは | SELECK