我正在尝试使用 ansible 删除目录中的所有文件,同时保留目录。为此,我在with_fileglob
任务中使用密钥将所有文件作为item
变量从该目录中取出。我创建了一个最小示例,在这里显示了我的问题:
流浪文件:
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.provision :ansible do |ansible|
ansible.limit = "all"
ansible.playbook = "local.yml"
end
end
Run Code Online (Sandbox Code Playgroud)
本地.yml:
- name: Test
hosts: all
become: true
tasks:
- name: Test debug
debug:
msg: "{{ item }}"
with_fileglob:
- "/vagrant/*"
Run Code Online (Sandbox Code Playgroud)
我希望得到 /vagrant 目录中每个文件的调试消息——因为这是通过 Vagrant 与 VM 同步的目录,我应该得到 Vagrantfile 和 local.yml 的消息。相反,我收到以下令人困惑的警告:
PLAY [Test] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [default]
TASK [Test debug] **************************************************************
[WARNING]: Unable to find '/vagrant' in expected paths (use -vvvvv to see
paths)
PLAY RECAP *********************************************************************
default : ok=1 changed=0 unreachable=0 failed=0
Run Code Online (Sandbox Code Playgroud)
这里引用了哪些预期路径?我已经用多个文件全局尝试过这个,但它们都以这种方式失败,我错过了什么?
seb*_*ert 10
Ansible 查找插件在本地机器(您启动 Ansible 的地方)上执行,而不是在远程机器上执行。
https://docs.ansible.com/ansible/latest/plugins/lookup.html
查找插件允许 Ansible 访问来自外部来源的数据。除了联系外部数据存储和服务之外,这还包括读取文件系统。像所有模板一样,这些插件在 Ansible 控制机器上进行评估,而不是在目标/远程机器上。
由于fileglob
仅适用于本地计算机,因此我测试了find
其他替代方案并想在此处提供一个示例。如果我们想找到所有*.jar
文件,可以这样做:
- name: Find jar files
find:
paths: "{{ install_jar_path }}"
patterns: "*.jar"
register: jar_src_file
changed_when: False
Run Code Online (Sandbox Code Playgroud)
jar_src_file
现在是一个数组。每个项目都有一个属性path
。
- set_fact:
first_jar: "{{ jar_src_file.files[0].path }}"
Run Code Online (Sandbox Code Playgroud)
这将为您提供用于测试目的的第一个 jar 文件的路径。with_items
如果需要,您可以使用例如循环遍历项目。
归档时间: |
|
查看次数: |
5382 次 |
最近记录: |