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

如何将文件下载到Ansible Controller而非远程受控节点?

Ansible 跨内外网文件下载传输解决方案

方案1:委派下载任务到控制端+文件同步(通用场景首选)

核心逻辑是通过delegate_to参数将下载任务切换到有内网访问权限的Ansible控制端执行,下载完成后再通过SSH同步到外网目标节点,支持所有大小的文件,可自定义缓存逻辑。
示例Playbook如下:

---
- name: 内网资源下载并同步到外网节点
  hosts: target
  gather_facts: false
  vars:
    # 替换为实际内网资源地址
    internal_file_url: "http://internal-repo.com/softwares/v2.3.0.tar.gz"
    # 控制端临时缓存路径
    local_cache_path: "/tmp/ansible_cache/v2.3.0.tar.gz"
    # 目标节点存放路径
    remote_dest_path: "/usr/local/src/v2.3.0.tar.gz"

  tasks:
    - name: 控制端下载内网资源
      ansible.builtin.get_url:
        url: "{{ internal_file_url }}"
        dest: "{{ local_cache_path }}"
        mode: "0644"
        validate_certs: false # 如果内网是自签证书可开启该参数
      delegate_to: localhost
      run_once: true # 多目标节点场景下仅下载一次
      become: false # 根据控制端权限调整

    - name: 同步文件到目标节点
      ansible.builtin.copy:
        src: "{{ local_cache_path }}"
        dest: "{{ remote_dest_path }}"
        mode: "0644"

    # 可选:清理控制端临时缓存,需要复用缓存可删除该任务
    - name: 清理控制端临时缓存文件
      ansible.builtin.file:
        path: "{{ local_cache_path }}"
        state: absent
      delegate_to: localhost
      run_once: true

方案2:小文件免缓存直接写入

针对体积小于10M的配置文件、脚本等小资源,可利用Ansible lookup插件默认在控制端执行的特性,无需生成本地临时文件,直接拉取内容写入目标节点:

- name: 拉取内网小文件内容写入目标节点
  ansible.builtin.copy:
    content: "{{ lookup('url', 'http://internal-repo.com/configs/prod.yml', validate_certs=False) }}"
    dest: "/etc/app/prod.yml"
    mode: "0644"

方案3:大文件传输优化

如果资源体积超过100M,建议用ansible.posix.synchronize模块替代copy模块,基于rsync协议实现差量传输,速度更快且支持断点续传:

- name: 大文件rsync同步到目标节点
  ansible.posix.synchronize:
    src: "{{ local_cache_path }}"
    dest: "{{ remote_dest_path }}"
    checksum: yes # 开启校验保证文件一致性

以上所有方案均兼容Ansible core 2.11.6版本,无需额外安装第三方依赖。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:24:03