我试图在ansible上自行崩溃...而且我遇到了需要将文件导入postgres的场景。 ansible的postgres模块没有mysql模块执行的所有命令......所以我必须找到另一种方法来对db运行sql命令。
我使用shell命令。但是,我不知道如何检查shell命令是否成功。
这是我的剧本到目前为止的样子:
- hosts: webservers
tasks:
- block:
- debug: msg='Start sql insert play...'
- copy: src=file.dmp dest=/tmp/file.dmp
- debug: msg='executing sql file...'
- shell: psql -U widgets widgets < /tmp/file.dmp
- debug: msg='all is well'
when: result|succeeded
rescue:
- debug: msg='Error'
always:
- debug: msg='End of Play'
# - block:
# - name: restart secondarywebservers
# - debug: msg='Attempting to restart secondary servers'
# - hosts: websecondaries
我最终想要做的是仅在第一个块成功时启动第二个代码块。现在,只是为了了解条件是如何工作的,当我确定已经执行了sql文件时,我试图看看是否可以在屏幕上打印消息。
失败并显示以下错误消息:
TASK [debug] *******************************************************************
fatal: [10.1.1.109]: FAILED! => {"failed": true, "msg": "The conditional check 'result|succeeded' failed. The error was: |failed expects a dictionary\n\nThe error appears to have been in '/etc/ansible/playbooks/dbupdate.yml': line 9, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n - shell: psql -U openser openser < /tmp/file.dmp\n - debug: msg='all is well'\n ^ here\n"}
我还在研究条件的工作原理......所以我的语法可能是错的。但更大的问题是 - 由于没有原生的ansible / postgresql导入命令,我意识到没有办法让ansible知道&#34; file.dmp&#34;中的命令。真的创建我的数据库记录...... 我可以在file.dmp中添加一个select语句来尝试选择我刚刚创建的记录......但是我如何将它传递给ansible呢?
只是想知道是否有人对我如何能够完成这样的事情有一些想法。
感谢。
编辑1
这里是测试内容&#34; file.dmp&#34;包含:
INSERT INTO mytable VALUES (DEFAULT, 64, 1, 1, 'test', 0, '^(.*)$', '\1);
编辑2
我打算尝试这样做:
复制(选择*来自mytable,其中ppid = 64)到&#39; /tmp/test.csv'使用CSV;
在插入语句之后然后对此文件进行ansible检查(可能使用lineinfile命令),以此向自己证明插入工作正常。
答案 0 :(得分:0)
您只需要register结果变量。
改变你的游戏应该有效:
- hosts: webservers
tasks:
- block:
- debug: msg='Start sql insert play...'
- copy: src=file.dmp dest=/tmp/file.dmp
- debug: msg='executing sql file...'
- shell: psql -U widgets widgets < /tmp/file.dmp
register: result
- debug: msg='all is well'
when: result|succeeded
rescue:
- debug: msg='Error'
always:
- debug: msg='End of Play'