2015年12月20日日曜日

AnsibleでPostgreSQLのユーザを作成するときに気をつけること。

このところ、暇があればAnsibleを触っています。

前回まではLAMP構成を作ってみましたが、今回はPostgreSQL環境を構築しようとして、
ユーザ作成で地味にはまったのでメモ。

AnsibleでPostgreSQLのユーザを作成するとき、以下のようにします。
*AnsibleのDocumentより抜粋
# Create rails user, grant privilege to create other databases and demote rails from super user status- postgresql_user: name=rails password=secret role_attr_flags=CREATEDB,NOSUPERUSER
なるほど、role_attr_flagsに割り当てる権限を指定するのだな。
というわけで、次のようにしてみました。

 - name: ユーザ作成
   postgresql_user:
     db: "{{ pgsql_dbname }}"
     name: "{{ pgsql_dbuser }}"
     password: "{{ pgsql_dbpass }}"
     priv: ALL
     encrypted: yes
     state: present
     login_user: postgres
     role_attr_flags: "NOSUPERUSER,NOCREATEDB,NOCREATEUSER,NOCREATEROLE"
   sudo_user: postgres
   sudo: yes
 しかし、これはエラーになります。
何故か?と小一時間悩んだのですが、どうやら、NO_SUPERUSER権限は既にNOCREATEDBなどの権限を有しているため、重複するロールを指定するとエラーになるようです。参考

なので、通常はNO_SUPERUSERだけで事が足りそうです。
自分は明示的に指定したかったので、以下のようにNOSUPERUSERを外しました。

 - name: ユーザ作成
   postgresql_user:
     db: "{{ pgsql_dbname }}"
     name: "{{ pgsql_dbuser }}"
     password: "{{ pgsql_dbpass }}"
     priv: ALL
     encrypted: yes
     state: present
     login_user: postgres
     role_attr_flags: "NOCREATEDB,NOCREATEUSER,NOCREATEROLE"
   sudo_user: postgres
   sudo: yes


0 件のコメント:

コメントを投稿