Ansible PostgreSQL Serverに指定したdatabaseがあるかを判定
環境
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ ansible --version
ansible 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/ansi/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
事前準備
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ ansible --version
ansible 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/ansi/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
Ansible
で操作する対象サーバ(ノード)にpython-psycopg2
が必要なのでpostgresqlxx-server
とかインストールするときに一緒にインストールしておくこと!
※postgresql_query
を実行するために必要
忙しい人のための答え
main.yml
- name: is exists database postgres
postgresql_query:
db: "postgres"
login_user: "postgres"
login_password: "{{ user_passwd_postgres_db }}"
port: "5432"
query: |
select 1 as exists from pg_database where datname = 'postgres'
register: query_res
- debug:
msg: "{{ query_res.rowcount }}"
解説
- name: is exists database postgres
postgresql_query:
db: "postgres"
login_user: "postgres"
login_password: "{{ user_passwd_postgres_db }}"
port: "5432"
query: |
select 1 as exists from pg_database where datname = 'postgres'
register: query_res
- debug:
msg: "{{ query_res.rowcount }}"
postgresql_query
の結果をregister
すると以下のようになる
- name: get database list
postgresql_query:
db: "postgres"
login_user: "postgres"
login_password: "{{ user_passwd_postgres_db }}"
port: "5432"
query: |
select 1 as exists from pg_database where datname = 'postgres'
register: query_res
- name: debug
debug:
msg: "{{ query_res }}"
TASK [test : get database list] ***********************
ok: [192.168.56.104]
TASK [test : debug] ***********************************
ok: [192.168.56.104] => {
"msg": {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"failed": false,
"query": "select 1 as exists from pg_database where datname = 'postgres'\n",
"query_result": [
{
"exists": 1
}
],
"rowcount": 1,
"statusmessage": "SELECT 1"
}
}
私の場合はquery_res
に格納したので、query_res.query_result
で結果にアクセス可能。
これは配列であり、今回の結果は1行しかないことが自明なので[0]
で1要素目にアクセス。ありがたい事に結果はjson
だ。
ただこれだとSELECT
の結果が0件の場合はエラーになるのでquery_res.rowcount
が正解。
存在しないDBを検索した場合は以下のとおり。
TASK [test : get database list] ***********************
ok: [192.168.56.104]
TASK [test : debug] ***********************************
ok: [192.168.56.104] => {
"msg": {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"failed": false,
"query": "select 1 as exists from pg_database where datname = 'hoge'\n",
"query_result": [],
"rowcount": 0,
"statusmessage": "SELECT 0"
}
}
この場合は"query_result" : []
になってしまうので、rowcount
見るほうがいい。
Author And Source
この問題について(Ansible PostgreSQL Serverに指定したdatabaseがあるかを判定), 我々は、より多くの情報をここで見つけました https://qiita.com/Ki2neudon/items/b7cc2a2d8511b568a2fc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .