我想执行一个从我的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数据库时,我没有找到我想用这个脚本创建的表。
答案 0 :(得分:1)
Ansible中的所有查找都在本地 ansible主机上执行。
所以:
with_fileglob:
- "{{ app_path }}/{{ app_dir }}/{{ scripts_dir }}/*"
使用fileglob
查找,搜索localhost上的文件!
您应该重构此代码,首先使用find
模块查找所有必需的脚本,注册其输出,然后使用with_items
循环注册变量来执行脚本。