ようへいの日々精進XP

よかろうもん

itamae で作ったユーザーを削除する

tl;dr

itamae で作ったユーザーを削除する機会があった. 当然, itamae で作ったユーザーだから, itamae レシピ上で削除しておけばプロビジョニングの過程でサーバー上から削除されるものとばっかり思っていたけど...

削除はサポートしていなかった

github.com

...
      def pre_action
        case @current_action
        when :create
          attributes.exist = true
        end
...

上記のように, itamae の user リソースのアクション定義に create 以外は実装されていなかった.

他のリソースを見てみると... 例えば, file リソースだと,

...
      def pre_action
        current.exist = run_specinfra(:check_file_is_file, attributes.path)

        case @current_action
        when :create
          attributes.exist = true
        when :delete
          attributes.exist = false
        when :edit
          attributes.exist = true
...

delete アクションが実装されている.

きっと, なにか経緯があったりするのかなーと思ったりしつつ, ユーザーは手動で削除しようってことになった.

ということで

ユーザー自体は userdel で手動で削除したあとで itamae のレシピから削除したユーザーのエントリを削除する対応をとった.

Chef とか Ansible ってどうだっけ

Chef だと

docs.chef.io

user リソースには :remove アクションが用意されていた. ふむふむ.

Ansible だと

docs.ansible.com

Chef 同様に remove パラメータが用意されたいた. ふむふむ.

ということで

必要であれば, 自分で実装してプルリクエストを送れば良いということで自己解決 (プルリクエストを送るとは言っていない). でも, なぜ, remove または delete が実装されていないのか聞いてみたい気もした.