首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从大型JSON输出中提取变量

从大型JSON输出中提取变量
EN

Stack Overflow用户
提问于 2022-07-27 21:15:48
回答 1查看 85关注 0票数 0

gcp_sql_instance_info模块似乎不允许您指定要获取信息的数据库的名称。它所做的就是项目中每个数据库的每一个细节。

根据数据库的名称提取数据库的"ipAddress“并将该值注册到变量的最佳方法是什么?

代码语言:javascript
复制
{
"resources": [
    {
        "kind": "sql#instance",
        "state": "RUNNABLE",
        "databaseVersion": "POSTGRES_13",
        "settings": {
            "authorizedGaeApplications": [],
            "tier": "db-custom-1-3840",
            "kind": "sql#settings",
            "availabilityType": "ZONAL",
            "pricingPlan": "PER_USE",
            "replicationType": "SYNCHRONOUS",
            "activationPolicy": "ALWAYS",
            "ipConfiguration": {
                "privateNetwork": "example-network",
                "authorizedNetworks": [],
                "ipv4Enabled": false
            },
            "locationPreference": {
                "zone": "us-west1-b",
                "kind": "sql#locationPreference"
            },
            "dataDiskType": "PD_SSD",
            "maintenanceWindow": {
                "kind": "sql#maintenanceWindow",
                "hour": 0,
                "day": 0
            },
            "backupConfiguration": {
                "startTime": "02:00",
                "kind": "sql#backupConfiguration",
                "backupRetentionSettings": {
                    "retentionUnit": "COUNT",
                    "retainedBackups": 7
                },
                "enabled": false,
                "replicationLogArchivingEnabled": false,
                "pointInTimeRecoveryEnabled": false,
                "transactionLogRetentionDays": 7
            },
            "settingsVersion": "3",
            "storageAutoResizeLimit": "0",
            "storageAutoResize": true,
            "dataDiskSizeGb": "100"
        },
        "ipAddresses": [
            {
                "type": "PRIVATE",
                "ipAddress": "10.10.10.1"
            }
        ],
        "instanceType": "CLOUD_SQL_INSTANCE",
        "backendType": "SECOND_GEN",
        "name": "database-1",
        "region": "us-west1",
        "gceZone": "us-west1-b",
        "databaseInstalledVersion": "POSTGRES_13_7",
        "createTime": "2022-07-22T20:20:32.274Z"
    },
    {
        "kind": "sql#instance",
        "state": "RUNNABLE",
        "databaseVersion": "MYSQL_8_0",
        "settings": {
            "authorizedGaeApplications": [],
            "tier": "db-n1-standard-1",
            "kind": "sql#settings",
            "availabilityType": "ZONAL",
            "pricingPlan": "PER_USE",
            "replicationType": "SYNCHRONOUS",
            "activationPolicy": "ALWAYS",
            "ipConfiguration": {
                "privateNetwork": "example-network",
                "authorizedNetworks": [],
                "ipv4Enabled": false
            },
            "locationPreference": {
                "zone": "us-west1-c",
                "kind": "sql#locationPreference"
            },
            "dataDiskType": "PD_SSD",
            "backupConfiguration": {
                "startTime": "21:00",
                "kind": "sql#backupConfiguration",
                "backupRetentionSettings": {
                    "retentionUnit": "COUNT",
                    "retainedBackups": 7
                },
                "enabled": false,
                "transactionLogRetentionDays": 7
            },
            "settingsVersion": "1",
            "storageAutoResizeLimit": "0",
            "storageAutoResize": true,
            "dataDiskSizeGb": "10"
        },
        "ipAddresses": [
            {
                "type": "PRIVATE",
                "ipAddress": "10.10.10.2"
            }
        ],
        "instanceType": "CLOUD_SQL_INSTANCE",
        "backendType": "SECOND_GEN",
        "name": "database-2",
        "region": "us-west1",
        "gceZone": "us-west1-c",
        "databaseInstalledVersion": "MYSQL_8_0_26",
        "createTime": "2022-07-27T19:27:59.235Z"
    }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-28 00:00:30

这是一个实现预期输出的工作剧本:

代码语言:javascript
复制
- hosts: localhost
  vars:
    db_instance_name: instance-1
  tasks:
    - name: get info on an instance
      gcp_sql_instance_info:
        project: project_id
        auth_kind: serviceaccount
        service_account_file: "/path/to/sa/example.json"
      register: cloud_sql_resources  
    
    - set_fact: 
        query: "resources[?contains(name,'{{ db_instance_name }}')].ipAddresses[].ipAddress"

    - set_fact: 
        ipAddress: "{{ cloud_sql_resources | to_json | from_json | json_query(query) }}"

    - debug:
        msg: "{{ ipAddress }}"

您可以像这样运行您的游戏手册:ansible-playbook -v main.yaml --extra-vars "db_instance_name=instance-1",它可以打印:

代码语言:javascript
复制
TASK [debug] ********************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "35.224.46.127"
    ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73144702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档