我正试着在ansible上速成课程..。我遇到了一个场景,我需要将一个文件导入postgres。ansible的postgres模块没有mysql模块所做的所有命令.因此,我不得不找到另一种方法来对数据库运行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不可能知道"file.dmp“中的命令确实创建了我的数据库记录.我可以在file.dmp中添加一个select语句来尝试选择我刚刚创建的记录.但我该怎么把这个传给ansible呢?
只是想知道是否有人对我如何完成这样的事情有一些想法。
谢谢。
编辑1
下面是测试"file.dmp“的内容:
INSERT INTO mytable VALUES (DEFAULT, 64, 1, 1, 'test', 0, '^(.*)$', '\1);编辑2
我要试着做这样的事:
复制(从mytable ( ppid = 64)选择*到CSV的'/tmp/test.csv‘;
在插入语句之后..。然后让ansible检查这个文件(可能使用lineinfile命令),以此向自己证明insert有效。
发布于 2016-03-02 16:49:11
您只需要对结果变量进行寄存器。
让你的剧本看起来像这样应该是可行的:
- 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'https://stackoverflow.com/questions/35752551
复制相似问题