如何编写Ansible Playbook遍历GCP实例磁盘并校验匹配
如何用Ansible Playbook检查GCP实例磁盘的deviceName与磁盘名称是否匹配
需求
遍历GCP项目中的所有实例,提取每个实例挂载磁盘的deviceName和source字段末尾的磁盘名称,筛选出两者不匹配的项。
已完成的基础步骤
已通过gcp_compute_instance_info模块获取实例信息,代码如下:
- name: 获取实例信息 gcp_compute_instance_info: zone: us-central1-a filters: - name = "{{ machine1 }}" project: production-project auth_kind: "{{ gcp_cred_kind }}" service_account_file: "{{ gcp_cred_file }}" register: server_reg
磁盘数据返回示例
模块返回的单磁盘数据结构如下(仅展示关键字段):
{ "msg": { "deviceName": "test-server", "source": "https://www.googleapis.com/compute/v1/projects/stl-production-project/zones/us-central1-a/disks/test-server" } } { "msg": { "deviceName": "hahahaha", "source": "https://www.googleapis.com/compute/v1/projects/production-project/zones/us-central1-a/disks/test-data" } }
其中第二个磁盘的deviceName与source末尾的磁盘名称不匹配,需要识别这类情况。
完整Playbook实现
以下Playbook会遍历所有实例的磁盘,提取并对比字段,输出不匹配的项:
--- - name: 检查GCP实例磁盘deviceName与磁盘名称是否匹配 hosts: localhost gather_facts: no vars: gcp_project: production-project gcp_zone: us-central1-a gcp_cred_kind: serviceaccount gcp_cred_file: /path/to/your/service-account-key.json tasks: - name: 获取所有实例信息 gcp_compute_instance_info: zone: "{{ gcp_zone }}" project: "{{ gcp_project }}" auth_kind: "{{ gcp_cred_kind }}" service_account_file: "{{ gcp_cred_file }}" register: all_instances - name: 遍历实例,检查磁盘匹配情况 debug: msg: | 实例: {{ instance.name }} 不匹配的磁盘: {% for disk in instance.disks %} {% set disk_name = disk.source.split('/')[-1] %} {% if disk.deviceName != disk_name %} - deviceName: {{ disk.deviceName }} | 实际磁盘名称: {{ disk_name }} {% endif %} {% endfor %} loop: "{{ all_instances.resources }}" loop_control: loop_var: instance when: > instance.disks | selectattr('deviceName', 'ne', (disk.source.split('/')[-1] if disk.source else '')) | list | length > 0
关键逻辑说明
- 获取所有实例:移除
filters参数可获取指定区域内的所有实例,若需筛选特定实例可保留原过滤规则。 - 提取磁盘名称:使用
split('/')[-1]拆分source字段的URL,取最后一段作为实际磁盘名称。 - 对比与筛选:通过Jinja2模板遍历每个磁盘,对比
deviceName和提取的磁盘名称,仅输出不匹配的项。 - 条件输出:
when条件确保仅当实例存在不匹配磁盘时才输出信息,避免无意义的空输出。
内容的提问来源于stack exchange,提问作者Philip Shangguan
相关产品推荐
相关产品推荐

