判断Ansible PostgreSQL服务器是否存在指定的数据库
环境
$ 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,这是必需的。
忙碌的人的解决方案
- 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 的结果注册,结果如下所示。
- 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访问结果。
这是一个数组,并且由于显而易见的原因,本次结果只有一行,所以可以通过[0]访问第一个元素。值得感激的是,结果是json格式的。
如果SELECT语句的结果为0条,那么query_res.rowcount就是正确的解决办法。
如果搜索不存在的数据库,结果如下。
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。