如何在ansible中使psql进程成为幂等的?

时间:2016-08-24 07:18:13

标签: postgresql ansible ansible-playbook psql

我有一个在{{get (get image mySize) 'url')}}

中运行psql流程的流程
ansible

此任务一直在运行。我如何使这个幂等?

2 个答案:

答案 0 :(得分:2)

我想唯一的办法就是将你的sql脚本包装成shell脚本并进行检查 就像一个例子(我知道有postgresql_user模块,但这是一个例子):

#!/bin/bash
if [[ $(psql postgres -tAc "SELECT 'found' FROM pg_roles WHERE rolname='{{ user }}'" | grep found) ]]; then
  echo "User exists"
else
  psql -c "CREATE USER {{ user }} LOGIN ENCRYPTED PASSWORD '{{ password }}';" > /dev/null
  echo "User created"
fi

在你的剧本中:

- name: Run psql
  shell: createuser.sh
  register: result
  changed_when: "'User created' in result.stdout"

答案 1 :(得分:1)

我的建议是编写一个查询数据库的脚本来检查它的状态。这个脚本不应该改变任何东西,应该使用changed_when: false并打印一些智能输出来设置它自己的任务。使用register: result

注册该输出

进行所有更改的现有任务应该具有条件when: result.stdout contains <some string>,以便只有在第一个任务发现数据库未处于正确状态时才会运行。

更好的解决方案是仅使用提供的Postgres模块进行此设置,但不知道.sql脚本中的内容,我无法知道是否可能。