Postgresql 如何在ansible中使psql进程幂等?
我有一个进程在ansible中运行psql进程Postgresql 如何在ansible中使psql进程幂等?,postgresql,ansible,psql,Postgresql,Ansible,Psql,我有一个进程在ansible中运行psql进程 此任务一直在运行。如何使这个幂等元?我想唯一的方法是将sql脚本包装成shell脚本并进行检查。 作为一个例子,我知道有postgresql_用户模块,但这是一个例子: #!/bin/bash if [[ $(psql postgres -tAc "SELECT 'found' FROM pg_roles WHERE rolname='{{ user }}'" | grep found) ]]; then echo "User exists"
此任务一直在运行。如何使这个幂等元?我想唯一的方法是将sql脚本包装成shell脚本并进行检查。 作为一个例子,我知道有postgresql_用户模块,但这是一个例子:
#!/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"
我想唯一的方法是将sql脚本包装成shell脚本并进行检查。 作为一个例子,我知道有postgresql_用户模块,但这是一个例子:
#!/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"
我的建议是编写一个脚本,查询数据库以检查其状态。这个脚本应该不能更改任何内容,应该设置为自己的任务,使用changed_when:false并打印一些智能输出。用Register:result注册该输出 进行所有更改的现有任务应具有条件when:result.stdout contains,以便仅当第一个任务发现数据库未处于正确状态时,它才会运行
更好的解决方案是只使用提供的Postgres模块进行此设置,但不知道.sql脚本中有什么,我不知道这是否可行。我的建议是编写一个脚本,查询数据库以检查其状态。这个脚本应该不能更改任何内容,应该设置为自己的任务,使用changed_when:false并打印一些智能输出。用Register:result注册该输出 进行所有更改的现有任务应具有条件when:result.stdout contains,以便仅当第一个任务发现数据库未处于正确状态时,它才会运行
更好的解决方案是只使用提供的Postgres模块进行此设置,但不知道.sql脚本中有什么,我不知道这是否可行。有人怎么知道?这完全取决于脚本内容。您需要创建预运行检查,最有可能的是为三个脚本中的每一个创建一个单独的脚本,并且仅当预检查返回的条件不满足时才运行真正的脚本。有人怎么知道?这完全取决于脚本内容。您需要为这三种检查中的每种检查创建一个单独的脚本,并且仅当预检查返回的条件不满足时才运行真正的脚本。1非幂等2命令行不是可行的方法3但它可以工作…1非幂等2命令行不是可行的方法3但它可以工作。。。