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

Ansible使用gcp_compute_disk模块从快照创建GCP磁盘失败问题

Ansible 2.9 使用gcp_compute_disk从快照创建磁盘的修复方案

问题根因

  • source_snapshot参数传值格式错误:Ansible 2.9内置的gcp_compute_disk模块要求该参数传入快照的selfLink字符串,你当前传入的是包含selfLink的字典结构,模块无法识别该参数,直接按空白磁盘逻辑创建。如果你是通过gcp_compute_snapshot模块生成快照并注册为变量,需要取该变量的selfLink属性,而非直接传入整个变量。
  • 磁盘类型与磁盘zone不匹配:你创建磁盘的zone是us-central1-a,但硬编码的磁盘类型URL中zone为us-central1-b,参数校验失败后会被模块忽略,进一步导致快照逻辑不生效。

修复后配置示例

- name: Create GCP snapshots
  hosts: localhost
  gather_facts: yes
  vars:
      gcp_project: test-project
      gcp_cred_kind: serviceaccount
      gcp_cred_file: /etc/ansible/keys/ansible-test-project-service-account-key.json
      zone: "us-central1-a"
      region: "us-central1"
      instancename: "test-instance"
      # 直接定义为字符串即可,无需套字典
      snapshot_selflink: "https://www.googleapis.com/compute/v1/projects/test-project/global/snapshots/test-snapshot1"

  tasks:
   - name: create data disk from a snapshot
     gcp_compute_disk:
       name: "{{ instancename }}-data-1"
       description: "{{ instancename }}-data-1"
       zone: "{{ zone }}"
       project: "{{ gcp_project }}"
       auth_kind: "{{ gcp_cred_kind }}"
       service_account_file: "{{ gcp_cred_file }}"
       # 直接传入快照selfLink字符串
       source_snapshot: "{{ snapshot_selflink }}"
       labels:
         usage: test-label
       # 磁盘类型的zone通过变量引用,避免不匹配
       type: "https://www.googleapis.com/compute/v1/projects/test-project/zones/{{ zone }}/diskTypes/pd-standard"
       state: present
     register: disk_data

如果你的快照是通过gcp_compute_snapshot任务生成并注册到disksnapshot变量,直接将source_snapshot的值改为{{ disksnapshot.selfLink }}即可。

验证方法

修改后如果仍有问题,可加-vvv参数运行playbook,查看模块调用GCP API的请求体,确认sourceSnapshot字段是否已正确填入快照的selfLink值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 12:06:04