无法从ansible执行postgres sql脚本

时间:2017-07-07 07:25:06

标签: postgresql ansible

我想执行一个从我的git资源中获取的postgresql sql。 我想首先从git repository获取所有脚本,然后想从特定目录执行脚本,我将其作为ansible脚本中的输入。这是我完整的ansible脚本

- hosts: "{{ HOST }}"
  become: true
  become_user: "admin"
  become_method: su
  gather_facts: true
  vars:
    app_path: "{{ app_path }}"
    app_dir: "{{ app_dir }}"

  tasks:
    - stat:
        path: "{{ app_path }}/{{ app_dir }}"
      register: exist

    - name: create "{{ app_path }}/{{ app_dir }}" directory
      file: dest="{{ app_path }}/{{ app_dir }}" state=directory 
      when: exist.stat.exists != True


    - git: 
        repo: http://git-url/postgres-demo.git
        dest: "{{ app_path }}/{{ app_dir }}"
        version: "{{ GIT_TAG }}"
        refspec: '+refs/heads/{{ GIT_TAG }}:refs/remotes/origin/{{ GIT_TAG }}'
        update: yes
        force: true
      register: cloned  

    - name: Execute postgres dump files
      shell: "/usr/bin/psql -qAtw -f  {{ item }}"
      with_fileglob:
          - "{{ app_path }}/{{ app_dir }}/{{ scripts_dir }}/*"
      register: postgres_sql
      become: true
      become_user: "postgres"
      become_method: su

上面的脚本已成功执行,但postgres步骤在逐渐消失后抛弃了我:

[WARNING]: Unable to find '/home/admin/postgres-dev/test' in expected paths.

当我检查我的postgresql数据库时,我没有找到我想用这个脚本创建的表。

1 个答案:

答案 0 :(得分:1)

Ansible中的所有查找都在本地 ansible主机上执行。

所以:

with_fileglob:
  - "{{ app_path }}/{{ app_dir }}/{{ scripts_dir }}/*"

使用fileglob查找,搜索localhost上的文件!

您应该重构此代码,首先使用find模块查找所有必需的脚本,注册其输出,然后使用with_items循环注册变量来执行脚本。