ansible - 如何检查将sql文件导入postgres的成功

时间:2016-03-02 16:14:34

标签: postgresql ansible ansible-playbook

我试图在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命令),以此向自己证明插入工作正常。

1 个答案:

答案 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'