{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/cli/bpmetadata/blueprint-metadata",
  "$ref": "#/$defs/BlueprintMetadata",
  "$defs": {
    "BlueprintActuationTool": {
      "properties": {
        "type": {
          "type": "string"
        },
        "version": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintArchitecture": {
      "properties": {
        "diagram": {
          "type": "string"
        },
        "description": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "diagram",
        "description"
      ]
    },
    "BlueprintAuthor": {
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "title"
      ]
    },
    "BlueprintCloudProduct": {
      "properties": {
        "productId": {
          "type": "string"
        },
        "pageUrl": {
          "type": "string"
        },
        "label": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "pageUrl"
      ]
    },
    "BlueprintContent": {
      "properties": {
        "architecture": {
          "$ref": "#/$defs/BlueprintArchitecture"
        },
        "diagrams": {
          "items": {
            "$ref": "#/$defs/BlueprintDiagram"
          },
          "type": "array"
        },
        "documentation": {
          "items": {
            "$ref": "#/$defs/BlueprintListContent"
          },
          "type": "array"
        },
        "subBlueprints": {
          "items": {
            "$ref": "#/$defs/BlueprintMiscContent"
          },
          "type": "array"
        },
        "examples": {
          "items": {
            "$ref": "#/$defs/BlueprintMiscContent"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintCostEstimate": {
      "properties": {
        "description": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "description",
        "url"
      ]
    },
    "BlueprintDescription": {
      "properties": {
        "tagline": {
          "type": "string"
        },
        "detailed": {
          "type": "string"
        },
        "preDeploy": {
          "type": "string"
        },
        "html": {
          "type": "string"
        },
        "eulaUrls": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "architecture": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintDiagram": {
      "properties": {
        "name": {
          "type": "string"
        },
        "altText": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "name"
      ]
    },
    "BlueprintInfo": {
      "properties": {
        "title": {
          "type": "string"
        },
        "source": {
          "$ref": "#/$defs/BlueprintRepoDetail"
        },
        "version": {
          "type": "string"
        },
        "actuationTool": {
          "$ref": "#/$defs/BlueprintActuationTool"
        },
        "description": {
          "$ref": "#/$defs/BlueprintDescription"
        },
        "icon": {
          "type": "string"
        },
        "deploymentDuration": {
          "$ref": "#/$defs/BlueprintTimeEstimate"
        },
        "costEstimate": {
          "$ref": "#/$defs/BlueprintCostEstimate"
        },
        "cloudProducts": {
          "items": {
            "$ref": "#/$defs/BlueprintCloudProduct"
          },
          "type": "array"
        },
        "quotaDetails": {
          "items": {
            "$ref": "#/$defs/BlueprintQuotaDetail"
          },
          "type": "array"
        },
        "author": {
          "$ref": "#/$defs/BlueprintAuthor"
        },
        "softwareGroups": {
          "items": {
            "$ref": "#/$defs/BlueprintSoftwareGroup"
          },
          "type": "array"
        },
        "supportInfo": {
          "$ref": "#/$defs/BlueprintSupport"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "title",
        "source"
      ]
    },
    "BlueprintInterface": {
      "properties": {
        "variables": {
          "items": {
            "$ref": "#/$defs/BlueprintVariable"
          },
          "type": "array"
        },
        "variableGroups": {
          "items": {
            "$ref": "#/$defs/BlueprintVariableGroup"
          },
          "type": "array"
        },
        "outputs": {
          "items": {
            "$ref": "#/$defs/BlueprintOutput"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintListContent": {
      "properties": {
        "title": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "title"
      ]
    },
    "BlueprintMetadata": {
      "properties": {
        "apiVersion": {
          "type": "string"
        },
        "kind": {
          "type": "string"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta"
        },
        "spec": {
          "$ref": "#/$defs/BlueprintMetadataSpec"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "spec"
      ]
    },
    "BlueprintMetadataSpec": {
      "properties": {
        "info": {
          "$ref": "#/$defs/BlueprintInfo"
        },
        "content": {
          "$ref": "#/$defs/BlueprintContent"
        },
        "interfaces": {
          "$ref": "#/$defs/BlueprintInterface"
        },
        "requirements": {
          "$ref": "#/$defs/BlueprintRequirements"
        },
        "ui": {
          "$ref": "#/$defs/BlueprintUI"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintMiscContent": {
      "properties": {
        "name": {
          "type": "string"
        },
        "location": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "name"
      ]
    },
    "BlueprintOutput": {
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "name"
      ]
    },
    "BlueprintQuotaDetail": {
      "properties": {
        "variable": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "GCE_INSTANCE",
            "GCE_DISK"
          ]
        },
        "quotaType": {
          "patternProperties": {
            ".*": {
              "type": "string"
            }
          },
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "type",
        "quotaType"
      ]
    },
    "BlueprintRepoDetail": {
      "properties": {
        "repo": {
          "type": "string"
        },
        "sourceType": {
          "type": "string"
        },
        "dir": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "repo",
        "sourceType"
      ]
    },
    "BlueprintRequirements": {
      "properties": {
        "roles": {
          "items": {
            "$ref": "#/$defs/BlueprintRoles"
          },
          "type": "array"
        },
        "services": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintRoles": {
      "properties": {
        "level": {
          "type": "string"
        },
        "roles": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "level",
        "roles"
      ]
    },
    "BlueprintSoftware": {
      "properties": {
        "title": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "licenseUrl": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "title"
      ]
    },
    "BlueprintSoftwareGroup": {
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "UNSPECIFIED",
            "OS"
          ]
        },
        "software": {
          "items": {
            "$ref": "#/$defs/BlueprintSoftware"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintSupport": {
      "properties": {
        "description": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "entity": {
          "type": "string"
        },
        "showSupportId": {
          "type": "boolean"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "description"
      ]
    },
    "BlueprintTimeEstimate": {
      "properties": {
        "configuration": {
          "type": "integer"
        },
        "deployment": {
          "type": "integer"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintUI": {
      "properties": {
        "input": {
          "$ref": "#/$defs/BlueprintUIInput"
        },
        "runtime": {
          "$ref": "#/$defs/BlueprintUIOutput"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintUIInput": {
      "properties": {
        "variables": {
          "patternProperties": {
            ".*": {
              "$ref": "#/$defs/DisplayVariable"
            }
          },
          "type": "object"
        },
        "sections": {
          "items": {
            "$ref": "#/$defs/DisplaySection"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintUIOutput": {
      "properties": {
        "outputMessage": {
          "type": "string"
        },
        "suggestedActions": {
          "items": {
            "$ref": "#/$defs/UIActionItem"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintVariable": {
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "default": true,
        "required": {
          "type": "boolean"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "BlueprintVariableGroup": {
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "variables": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "name"
      ]
    },
    "DisplaySection": {
      "properties": {
        "name": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "tooltip": {
          "type": "string"
        },
        "subtext": {
          "type": "string"
        },
        "parent": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "name"
      ]
    },
    "DisplayVariable": {
      "properties": {
        "name": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "invisible": {
          "type": "boolean"
        },
        "tooltip": {
          "type": "string"
        },
        "placeholder": {
          "type": "string"
        },
        "regexValidation": {
          "type": "string"
        },
        "minItems": {
          "type": "integer"
        },
        "maxItems": {
          "type": "integer"
        },
        "minLength": {
          "type": "integer"
        },
        "maxLength": {
          "type": "integer"
        },
        "min": {
          "type": "integer"
        },
        "max": {
          "type": "integer"
        },
        "section": {
          "type": "string"
        },
        "x-googleProperty": {
          "$ref": "#/$defs/GooglePropertyExtension"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "name"
      ]
    },
    "GCEDiskSizeExtension": {
      "properties": {
        "diskTypeVariable": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "diskTypeVariable"
      ]
    },
    "GCEExternalIPExtension": {
      "properties": {
        "networkVariable": {
          "type": "string"
        },
        "externalIpType": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "networkVariable"
      ]
    },
    "GCEFirewallExtension": {
      "properties": {
        "networkVariable": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "networkVariable"
      ]
    },
    "GCEFirewallRangeExtension": {
      "properties": {
        "firewallVariable": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "firewallVariable"
      ]
    },
    "GCEGPUCountExtension": {
      "properties": {
        "machineTypeVariable": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "machineTypeVariable"
      ]
    },
    "GCEGPUTypeExtension": {
      "properties": {
        "machineType": {
          "type": "string"
        },
        "gpuType": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "machineType"
      ]
    },
    "GCEGenericResourceExtension": {
      "properties": {
        "resourceVariable": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "resourceVariable"
      ]
    },
    "GCEIPForwardingExtension": {
      "properties": {
        "networkVariable": {
          "type": "string"
        },
        "notConfigurable": {
          "type": "boolean"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "networkVariable"
      ]
    },
    "GCELocationExtension": {
      "properties": {
        "allowlistedZones": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "allowlistedRegions": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "GCEMachineTypeExtension": {
      "properties": {
        "minCpu": {
          "type": "integer"
        },
        "minRamGb": {
          "type": "integer"
        },
        "disallowCustomMachineTypes": {
          "type": "boolean"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "GCENetworkExtension": {
      "properties": {
        "allowSharedVpcs": {
          "type": "boolean"
        },
        "machineTypeVariable": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "machineTypeVariable"
      ]
    },
    "GCESubnetworkExtension": {
      "properties": {
        "networkVariable": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "networkVariable"
      ]
    },
    "GooglePropertyExtension": {
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "EMAIL_ADDRESS",
            "MULTI_LINE_STRING",
            "GCE_DISK_IMAGE",
            "GCE_DISK_TYPE",
            "GCE_DISK_SIZE",
            "GCE_MACHINE_TYPE",
            "GCE_NETWORK",
            "GCE_ZONE",
            "GCE_SUBNETWORK",
            "GCE_REGION",
            "GCE_GPU_TYPE",
            "GCE_GPU_COUNT",
            "GCE_EXTERNAL_IP",
            "GCE_IP_FORWARDING",
            "GCE_FIREWALL",
            "GCE_FIREWALL_RANGE",
            "GCE_GENERIC_RESOURCE",
            "GCS_BUCKET",
            "IAM_SERVICE_ACCOUNT"
          ]
        },
        "zoneProperty": {
          "type": "string"
        },
        "gceMachineType": {
          "$ref": "#/$defs/GCEMachineTypeExtension"
        },
        "gceDiskSize": {
          "$ref": "#/$defs/GCEDiskSizeExtension"
        },
        "gceSubnetwork": {
          "$ref": "#/$defs/GCESubnetworkExtension"
        },
        "gceResource": {
          "$ref": "#/$defs/GCEGenericResourceExtension"
        },
        "gceGpuType": {
          "$ref": "#/$defs/GCEGPUTypeExtension"
        },
        "gceGpuCount": {
          "$ref": "#/$defs/GCEGPUCountExtension"
        },
        "gceNetwork": {
          "$ref": "#/$defs/GCENetworkExtension"
        },
        "gceExternalIp": {
          "$ref": "#/$defs/GCEExternalIPExtension"
        },
        "gceIpForwarding": {
          "$ref": "#/$defs/GCEIPForwardingExtension"
        },
        "gceFirewall": {
          "$ref": "#/$defs/GCEFirewallExtension"
        },
        "gceFirewallRange": {
          "$ref": "#/$defs/GCEFirewallRangeExtension"
        },
        "gceZone": {
          "$ref": "#/$defs/GCELocationExtension"
        },
        "gceRegion": {
          "$ref": "#/$defs/GCELocationExtension"
        },
        "iamServiceAccount": {
          "$ref": "#/$defs/IAMServiceAccountExtension"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "type"
      ]
    },
    "IAMServiceAccountExtension": {
      "properties": {
        "roles": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "roles"
      ]
    },
    "ObjectMeta": {
      "properties": {
        "name": {
          "type": "string"
        },
        "namespace": {
          "type": "string"
        },
        "labels": {
          "patternProperties": {
            ".*": {
              "type": "string"
            }
          },
          "type": "object"
        },
        "annotations": {
          "patternProperties": {
            ".*": {
              "type": "string"
            }
          },
          "type": "object"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "UIActionItem": {
      "properties": {
        "heading": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "snippet": {
          "type": "string"
        },
        "showIf": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object",
      "required": [
        "heading"
      ]
    }
  }
}