You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ansible.builtin.file通过通配符创建符号链接?

关于Ansible file模块使用通配符创建符号链接的问题

核心结论

ansible.builtin.file模块不支持直接使用通配符(*)作为src参数。它会将通配符当作路径的一部分去查找,而非进行通配符扩展,这就是你遇到Error while replacing: [Errno 2] No such file or directory: b'/usr/share/easy-rsa/*'报错的原因。

解决方案

根据你的实际需求,可选择以下方式实现:

1. 批量链接目录内所有内容(推荐幂等性方案)

先通过find模块获取源目录下的所有文件/目录,再循环创建符号链接,这种方式符合Ansible幂等性要求,避免重复执行报错:

- name: 确保目标目录存在
  ansible.builtin.file:
    path: ~/easy-rsa/
    state: directory

- name: 查找源目录下的所有内容
  ansible.builtin.find:
    paths: /usr/share/easy-rsa/
    file_type: any
  register: easy_rsa_items

- name: 为每个内容创建符号链接
  ansible.builtin.file:
    src: "{{ item.path }}"
    dest: "~/easy-rsa/{{ item.path | basename }}"
    state: link
  loop: "{{ easy_rsa_items.files }}"

2. 使用Shell/Command模块直接执行ln命令

如果不需要严格的幂等性,可直接调用系统命令处理通配符扩展(注意:若目标目录已有同名文件会触发报错):

- name: 批量创建符号链接
  ansible.builtin.shell: ln -s /usr/share/easy-rsa/* ~/easy-rsa/
  args:
    creates: ~/easy-rsa/  # 仅当目标目录不存在时执行,可选

3. 链接整个目录(若需求是链接目录而非目录内内容)

如果你的目标是将整个/usr/share/easy-rsa/目录作为链接目标,直接使用完整路径即可,无需通配符:

- name: 创建目录符号链接
  ansible.builtin.file:
    src: /usr/share/easy-rsa/
    dest: ~/easy-rsa/
    state: link

内容的提问来源于stack exchange,提问作者Enshin Andrei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:08:28