如何在Ansible角色中从Google Drive下载公开共享文件?
解决Ansible从Google Drive下载公开归档文件的问题
不用非得把文件转存到其他平台,这里有几个直接处理Google Drive公开链接的方案,亲测可行:
方案1:改造Google Drive链接为直接下载格式
Google Drive的公开文件可以通过修改URL来获取直接下载链接:
- 从原链接中提取文件ID:你的链接里的ID是
0BxpbZGYVZsEeSFdrUnBNMUp1YzQ - 构造直接下载URL:
https://drive.google.com/uc?id=你的文件ID&export=download
然后用Ansible的get_url模块直接下载,示例Playbook代码:
- name: 从Google Drive下载公开归档文件 get_url: url: "https://drive.google.com/uc?id=0BxpbZGYVZsEeSFdrUnBNMUp1YzQ&export=download" dest: "/tmp/your_archive.tar.gz" validate_certs: no # 如果遇到证书验证问题可以加上 follow_redirects: all
方案2:用curl命令配合shell模块下载
如果get_url处理跳转有问题,可以直接用curl命令来处理Google Drive的重定向,示例:
- name: 使用curl下载Google Drive文件 shell: | curl -L -o /tmp/your_archive.tar.gz "https://drive.google.com/uc?id=0BxpbZGYVZsEeSFdrUnBNMUp1YzQ&export=download" args: creates: /tmp/your_archive.tar.gz # 避免重复下载
方案3:用gdown工具(更稳定的第三方工具)
gdown是一个专门用于下载Google Drive文件的Python工具,处理各种链接格式都很靠谱:
- 先安装gdown:
- name: 安装gdown工具 pip: name: gdown state: present
- 用gdown下载文件,直接用原共享链接就行:
- name: 用gdown下载Google Drive文件 command: gdown "https://drive.google.com/file/d/0BxpbZGYVZsEeSFdrUnBNMUp1YzQ/view?usp=sharing" args: chdir: /tmp # 指定下载目录 creates: /tmp/your_archive.tar.gz # 按需替换成你的归档文件名
这三个方案都不需要转存文件,直接就能在Ansible里完成下载。如果只是简单的公开文件,方案1最省事;如果遇到复杂的跳转或者文件名识别问题,方案3更可靠。
内容的提问来源于stack exchange,提问作者Marek M
相关产品推荐
相关产品推荐

