我有一个在{{get (get image mySize) 'url')}}
psql
流程的流程
ansible
此任务一直在运行。我如何使这个幂等?
答案 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脚本中的内容,我无法知道是否可能。