質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

4984閲覧

ansibleでpostgresqlでdb、ユーザー、テーブルを作成

color

総合スコア90

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2020/10/01 03:59

ansibleでpostgresqlでdb、ユーザー、テーブルを作成したいのですが、
現在以下のコードだと2回目から実行時に既にあるのでエラーが発生します。

ignore_errors: yes
を指定して無視していますが
dbやユーザー、tableがあった場合は処理しない様な事をしたいのですが、
ご存知でしょうか。
よろしくお願いします。

yml

1- name: create database mail 2 postgresql_db: 3 name: mail 4 become: yes 5 become_user: postgres 6 ignore_errors: yes 7 8- name: create user mail 9 postgresql_user: 10 db: mail 11 name: mail 12 password: mail 13 become: yes 14 become_user: postgres 15 ignore_errors: yes 16 17- name: Create Table data 18 community.general.postgresql_table: 19 db: mail 20 name: data 21 columns: 22 - id bigserial primary key 23 - from_value text 24 - subject_value text 25 - body_value text 26 - created_at text 27 owner: mail 28 become: yes 29 become_user: postgres 30 ignore_errors: yes 31 32- name: Create Table mails 33 community.general.postgresql_table: 34 name: mails 35 db: mail 36 columns: 37 - id bigserial primary key 38 - rcpt text 39 - data_id bigserial 40 owner: mail 41 become: yes 42 become_user: postgres 43 ignore_errors: yes

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

2回目から実行時に既にあるのでエラーが発生します。

postgresql_* モジュールには冪等性があるので、すでに存在している場合でもエラーにならないはずです。こちらで、実行してみたところ2回めもエラーになりませんでした。

register で結果を変数に登録して、debug でその値を表示することで、2回めの実行時のエラーの詳細を確認してみてください。
例:

- name: create database mail postgresql_db: name: mail become: yes become_user: postgres ignore_errors: yes register: db - debug: var=db - name: create user mail postgresql_user: db: mail name: mail password: mail become: yes become_user: postgres ignore_errors: yes register: user - debug: var=user - name: Create Table data community.general.postgresql_table: db: mail name: data columns: - id bigserial primary key - from_value text - subject_value text - body_value text - created_at text owner: mail become: yes become_user: postgres ignore_errors: yes register: table - debug: var=table - name: Create Table mails community.general.postgresql_table: name: mails db: mail columns: - id bigserial primary key - rcpt text - data_id bigserial owner: mail become: yes become_user: postgres ignore_errors: yes register: table2 - debug: var=table2

投稿2020/10/01 07:29

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

先日、以下のような task を書きました(MySQLでの例ですが):

- name: check zabbix databases shell: /usr/bin/mysql -u root --password={{ dbpassword }} -e 'show databases;' | grep {{ dbname }}> /dev/null 2>&1 ignore_errors: yes register: show_zabbix_databases - name: create Zabbix DB shell: | mysql -u root --password={{ dbpassword }} -e " CREATE DATABASE {{ dbname }} CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL PRIVILEGES ON {{ dbname }}.* TO {{ dbuser }}@localhost identified by '{{ dbpassword }}';" when: show_zabbix_databases.rc != 0

DBが存在するかを調べて、その結果をregisterに登録し、 when でその返り値で実行するか否かを判断しています。

PostgreSQL でも同様にできると思います。

投稿2020/10/01 04:23

xotaki

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

color

2020/10/05 06:24

ありがとう御座いました。無事に作成出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問