tools/gcpviz/labels.yaml (341 lines of code) (raw):
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
cloudresourcemanager.googleapis.com/Organization:
label: |
{{ .Resource.Data.displayName }}
cloudresourcemanager.googleapis.com/Folder:
link: |
https://console.cloud.google.com/cloud-resource-manager?folder={{ GetLastPart .Resource.Data.name }}
label: |
{{ .Resource.Data.displayName }}
cloudresourcemanager.googleapis.com/Project:
link: |
https://console.cloud.google.com/home/dashboard?project={{ index .Ancestors 0 | GetLastPart }}
label: |
{{ .Resource.Data.name }}
# Suppress Compute Engine projects
compute.googleapis.com/Project:
link: ""
label: ""
compute.googleapis.com/Network:
link: |
https://console.cloud.google.com/networking/networks/details/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
Network|{{ "{" }}{{ .Resource.Data.name }}|{{ if .Resource.Data.subnetworkConfig }}{{ with $snc := .Resource.Data.subnetworkConfig }}{{ range $i, $s := $snc }}{{ $s.ipCidrRange }}{{if NotLast $i $snc }}|{{end}}{{end}}{{end}}{{else}}{{ if .Resource.Data.subnetworks }}({{len .Resource.Data.subnetworks }} subnets){{end}}{{end}} }
compute.googleapis.com/Subnetwork:
label: |
<<u>{{ .Resource.Data.name }}</u>
{{ GetRegion .Resource.Data.region }}: {{ .Resource.Data.ipCidrRange }}
{{if .Resource.Data.secondaryIpRanges }}
{{range .Resource.Data.secondaryIpRanges}}{{ .rangeName }}: {{ .ipCidrRange }}
{{end}}{{end}}>
compute.googleapis.com/Instance:
link: |
https://console.cloud.google.com/compute/instancesDetail/zones/{{ GetLastPart .Resource.Data.zone | urlquery }}/instances/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
{{ .Resource.Data.name }} ({{with $nif := index .Resource.Data.networkInterfaces 0}}{{ $nif.networkIP }}{{ end }})
{{ GetLastPart .Resource.Data.machineType }}
compute.googleapis.com/Router:
link: |
https://console.cloud.google.com/hybrid/routers/details/{{ GetLastPart .Resource.Data.region | urlquery }}/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
{{ if .Resource.Data.nats }}Cloud NAT:
{{else}}Cloud Router:
{{end}}{{ .Resource.Data.name }}
{{ if .Resource.Data.bgp }}BGP: {{ .Resource.Data.bgp.advertiseMode }}{{end}}
tailLabel: |
{{ if.Resource.Data.bgp }}ASN {{ .Resource.Data.bgp.asn }}{{end}}
compute.googleapis.com/InterconnectAttachment:
link: |
https://console.cloud.google.com/hybrid/attachments/details/{{ GetLastPart .Resource.Data.region | urlquery }}/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
Interconnect attachment:
{{ .Resource.Data.name }} ({{ .Resource.Data.type }} {{ .Resource.Data.bandwidth }})
VLAN: {{ .Resource.Data.vlanTag8021q }}
compute.googleapis.com/Interconnect:
link: |
https://console.cloud.google.com/hybrid/interconnects/details/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
Interconnect:
{{ .Resource.Data.name }} ({{ .Resource.Data.linkType }})
{{ .Resource.Data.circuitInfo.googleCircuitId }} / {{ .Resource.Data.circuitInfo.googleDemarcId }}
compute.googleapis.com/VpnTunnel:
link: |
https://console.cloud.google.com/hybrid/vpn/tunnels/details/{{ GetLastPart .Resource.Data.region | urlquery }}/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
tailLabel: |
{{ .Resource.Data.peerIp }}
label: |
VPN tunnel:
{{ .Resource.Data.name }}
{{ .Resource.Data.status }}
compute.googleapis.com/VpnGateway:
link: |
https://console.cloud.google.com/hybrid/vpn/gateways/details/{{ GetLastPart .Resource.Data.region | urlquery }}/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
tailLabel: |
{{ with $vif := .Resource.Data.vpnInterface }}{{ range $i, $v := $vif }}{{ .ipAddress }}{{if NotLast $i $vif }}, {{end }}{{end}}{{end}}
label: |
VPN gateway:
{{ .Resource.Data.name }}
{{ with $vif := .Resource.Data.vpnInterface }}{{ range $i, $v := $vif }}{{ .ipAddress }}{{if NotLast $i $vif }}, {{end }}{{end}}{{end}}
compute.googleapis.com/Address:
label: |
{{ .Resource.Data.name }}
{{ .Resource.Data.address }}
{{ .Resource.Data.addressType }}{{ if .Resource.Data.purpose }} | {{ .Resource.Data.purpose }}{{end}}
compute.googleapis.com/GlobalAddress:
label: |
{{ .Resource.Data.name }}
{{ .Resource.Data.address }}
{{ .Resource.Data.addressType }} | GLOBAL
compute.googleapis.com/Autoscaler:
label: |
Autoscaler: {{ .Resource.Data.name }}
{{ .Resource.Data.autoscalingPolicy.minNumReplicas }}-{{ .Resource.Data.autoscalingPolicy.maxNumReplicas }} replicas
compute.googleapis.com/BackendBucket:
label: |
{{ .Resource.Data.name }}
({{ .Resource.Data.bucketName }})
compute.googleapis.com/BackendService:
label: |
Backend:
{{ .Resource.Data.name }}
({{ .Resource.Data.protocol }}{{ if .Resource.Data.port }} port {{ .Resource.Data.port }}{{end}})
compute.googleapis.com/RegionBackendService:
label: |
Region backend: {{ .Resource.Data.name }}
({{ .Resource.Data.protocol }}{{ if .Resource.Data.port }} port {{ .Resource.Data.port }}{{end}})
compute.googleapis.com/NetworkEndpointGroup:
label: |
NEG: {{ .Resource.Data.name }}
{{ GetLastPart .Resource.Data.zone }} | {{ .Resource.Data.size }} of {{ .Resource.Data.networkEndpointType }}
compute.googleapis.com/Disk:
label: |
{{ GetLastPart .Resource.Data.type }}: {{ .Resource.Data.name }}
({{ .Resource.Data.sizeGb }} GB)
compute.googleapis.com/Firewall:
label: |
{{ .Resource.Data.name }}
{{ .Resource.Data.direction }} {{ if .Resource.Data.allowed }} ALLOW:
{{ range .Resource.Data.allowed }}{{ .IPProtocol }}{{ if .ports }}: {{ JoinNicely .ports }}{{end}} | {{end}}{{end}}{{ if .Resource.Data.denied }} DENY:
{{ range .Resource.Data.denied }}{{ .IPProtocol }}{{ if .ports }}: {{ JoinNicely .ports }}{{end}} | {{end}}{{end}}
{{ if eq .Resource.Data.direction "INGRESS" }}{{ if .Resource.Data.sourceRanges }}{{ JoinNicely .Resource.Data.sourceRanges }}{{ else }}{{ if .Resource.Data.sourceServiceAccounts }}{{ JoinNicely .Resource.Data.sourceServiceAccounts }}{{ else }}{{ if .Resource.Data.sourceTags }}{{ JoinNicely .Resource.Data.sourceTags }}{{ end }}{{ end }}{{ end }} ⟶ {{ if .Resource.Data.targetTags }}{{ JoinNicely .Resource.Data.targetTags }}{{ else }}{{ if .Resource.Data.targetServiceAccounts }}{{ JoinNicely .Resource.Data.targetServiceAccounts }}{{ end }}{{ end }} {{end}}
{{ if eq .Resource.Data.direction "EGRESS" }}{{ if .Resource.Data.sourceTags }}{{ JoinNicely .Resource.Data.sourceTags }}{{ else }}{{ if .Resource.Data.sourceServiceAccounts }}{{ JoinNicely .Resource.Data.sourceServiceAccounts }}{{ else }}ALL{{end}}{{end}} ⟶ {{ if .Resource.Data.targetServiceAccounts }}{{ JoinNicely .Resource.Data.targetServiceAccounts }}{{ else }}{{ if .Resource.Data.targetTags }}{{ JoinNicely .Resource.Data.targetTags }}{{end}}{{end}} {{ if .Resource.Data.destinationRanges }}({{ JoinNicely .Resource.Data.destinationRanges }}){{end}} {{end}}
compute.googleapis.com/HealthCheck:
label: |
{{ .Resource.Data.type }} healthcheck:
{{ .Resource.Data.name }}
compute.googleapis.com/HttpHealthCheck:
label: |
HTTP healthcheck:
{{ .Resource.Data.name }}
compute.googleapis.com/Image:
label: |
Image: {{ .Resource.Data.name }}
({{ .Resource.Data.diskSizeGb }} GB)
compute.googleapis.com/InstanceTemplate:
label: |
Template: {{ .Resource.Data.name }}
{{ GetLastPart .Resource.Data.properties.machineType }}
compute.googleapis.com/InstanceGroup:
label: |
{{ .Resource.Data.name }}
(size {{ .Resource.Data.size }})
compute.googleapis.com/License:
label: |
Image: {{ .Resource.Data.name }}
({{ .Resource.Data.licenseCode }})
compute.googleapis.com/Route:
label: |
{{ .Resource.Data.name }}
{{ .Resource.Data.destRange }}
compute.googleapis.com/Snapshot:
label: |
Snapshot: {{ .Resource.Data.name }}
compute.googleapis.com/SslCertificate:
label: |
TLS certificate: {{ .Resource.Data.name }}
{{ if .Resource.Data.managed }}{{ JoinNicely .Resource.Data.managed.domains }}: {{ .Resource.Data.managed.status }}{{end}}
{{ DaysLeft .Resource.Data.expireTime }} days left
compute.googleapis.com/TargetHttpProxy:
label: |
Target proxy: {{ .Resource.Data.name }}
HTTP
compute.googleapis.com/TargetHttpsProxy:
label: |
Target proxy: {{ .Resource.Data.name }}
HTTPS
compute.googleapis.com/TargetTcpProxy:
label: |
Target proxy: {{ .Resource.Data.name }}
TCP
compute.googleapis.com/TargetSslProxy:
label: |
Target proxy: {{ .Resource.Data.name }}
SSL
compute.googleapis.com/TargetPool:
label: |
Target pool: {{ .Resource.Data.name }}
compute.googleapis.com/TargetVpnGateway:
label: |
Target VPN gateway:
{{ .Resource.Data.name }}
(status {{ .Resource.Data.status }})
compute.googleapis.com/UrlMap:
label: |
URL map:
{{ .Resource.Data.name }}
appengine.googleapis.com/Application:
label: |
{{ .Resource.Data.name }}
appengine.googleapis.com/Service:
label: |
{{ .Resource.Data.name }}
appengine.googleapis.com/Version:
label: |
{{ .Resource.Data.name }}
cloudbilling.googleapis.com/BillingAccount:
label: |
{{ .Resource.Data.displayName }}
storage.googleapis.com/Bucket:
label: |
gs://{{ .Resource.Data.name }}/
{{if len .Resource.Data.location | lt 4}}{{ ToLower .Resource.Data.location }}{{else}}{{ .Resource.Data.location }}{{end}} {{ .Resource.Data.locationType }} | {{ .Resource.Data.storageClass }}
dns.googleapis.com/ManagedZone:
label: |
{{ .Resource.Data.name }}
{{ .Resource.Data.dnsName }}
({{ .Resource.Data.visibility }})
dns.googleapis.com/Policy:
label: |
{{ .Resource.Data.name }}
spanner.googleapis.com/Instance:
label: |
{{ .Resource.Data.name }}
({{ .Resource.Data.nodeCount }} nodes)
spanner.googleapis.com/Database:
label: |
{{ GetLastPart .Resource.Data.name }}
bigquery.googleapis.com/Dataset:
label: |
{{ .Resource.Data.id }}
{{ .Resource.Data.location }}
iam.googleapis.com/ServiceAccount:
label: |
{{ .Resource.Data.displayName }}
{{ .Resource.Data.email }}
iam.googleapis.com/ServiceAccountKey:
label: |
{{ GetLastPart .Resource.Data.name }}
{{ .Resource.Data.keyOrigin }} | {{ .Resource.Data.keyType }}
cloudkms.googleapis.com/KeyRing:
label: |
{{ GetLastPart .Resource.Data.name }}
cloudkms.googleapis.com/CryptoKeyVersion:
label: |
{{ GetLastPart .Resource.Data.name }}
Protection: {{ .Resource.Data.protectionLevel }}
container.googleapis.com/Cluster:
link: |
https://console.cloud.google.com/kubernetes/clusters/details/{{ urlquery .Resource.Data.location }}/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
GKE cluster: {{ .Resource.Data.name }}
{{ .Resource.Data.location }}, {{ .Resource.Data.currentNodeCount }} nodes
Master: {{ .Resource.Data.currentMasterVersion }}, nodes: {{ .Resource.Data.currentNodeVersion }}
container.googleapis.com/NodePool:
link: |
https://console.cloud.google.com/kubernetes/nodepool/{{ GetPartFromEnd .Resource.Data.selfLink 5 | urlquery }}/{{ GetPartFromEnd .Resource.Data.selfLink 3 | urlquery }}/{{ urlquery .Resource.Data.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
Node pool: {{ .Resource.Data.name }}
{{ .Resource.Data.config.machineType }}, {{ .Resource.Data.initialNodeCount }} nodes
{{ Join .Resource.Data.locations }}
sqladmin.googleapis.com/Instance:
label: |
{{ .Resource.Data.name }} ({{ .Resource.Data.databaseVersion }})
{{ .Resource.Data.settings.tier }}, {{ .Resource.Data.settings.dataDiskSizeGb }} GB
logging.googleapis.com/LogSink:
label: |
Log sink: {{ .Resource.Data.name }}
To: {{ Replace "bigquery.googleapis.com/" "" .Resource.Data.destination | Replace "storage.googleapis.com/" "" }}
logging.googleapis.com/LogMetric:
label: |
{{ .Resource.Data.name }}
{{ .Resource.Data.filter }}
compute.googleapis.com/ForwardingRule:
label: |
Forwarding rule:
{{ .Resource.Data.name }}
{{ .Resource.Data.IPProtocol }} {{ .Resource.Data.IPAddress }}:{{ if .Resource.Data.ports }}{{ JoinNicely .Resource.Data.ports }}{{else}}{{ .Resource.Data.portRange }}{{end}}
compute.googleapis.com/GlobalForwardingRule:
label: |
Global forwarding rule:
{{ .Resource.Data.name }}
{{ .Resource.Data.IPProtocol }} {{ .Resource.Data.IPAddress }}:{{ if .Resource.Data.ports }}{{ JoinNicely .Resource.Data.ports }}{{else}}{{ .Resource.Data.portRange }}{{end}}
compute.googleapis.com/InstanceGroupManager:
label: |
{{ .Resource.Data.name }}
(target size {{ .Resource.Data.targetSize }})
compute.googleapis.com/RegionDisk:
label: |
Regional {{ GetLastPart .Resource.Data.type }}: {{ .Resource.Data.name }}
({{ .Resource.Data.sizeGb }} GB)
bigquery.googleapis.com/Table:
label: |
{{ .Resource.Data.tableReference.tableId }}
pubsub.googleapis.com/Topic:
label: |
Topic: {{ .Resource.Data.name }}
pubsub.googleapis.com/Subscription:
label: |
Subscription: {{ GetLastPart .Resource.Data.name }}
compute.googleapis.com/SecurityPolicy:
label: |
Cloud Armor:
{{ .Resource.Data.name }}
k8s.io/Node:
link: |
https://console.cloud.google.com/kubernetes/node/{{ GetPartFromEnd .Resource.Parent 3 | urlquery}}/{{ GetLastPart .Resource.Parent | urlquery}}/{{ urlquery .Resource.Data.metadata.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
{{ .Resource.Data.metadata.name }}
Kubelet: {{ .Resource.Data.status.nodeInfo.kubeletVersion }}
CPU free: {{ .Resource.Data.status.allocatable.cpu }}
Memory free: {{ .Resource.Data.status.allocatable.memory }}
k8s.io/Namespace:
link: |
https://console.cloud.google.com/kubernetes/workload?pageState=("savedViews":("i":"1","c":%5B"gke%2F{{ GetPartFromEnd .Resource.Parent 3 | urlquery}}%2F{{ GetLastPart .Resource.Parent | urlquery}}"%5D,"n":%5B"{{ urlquery .Resource.Data.metadata.name }}"%5D))&project={{ index .Ancestors 0 | GetLastPart }}&p
label: |
Namespace: {{ .Resource.Data.metadata.name }}
k8s.io/Pod:
link: |
https://console.cloud.google.com/kubernetes/pod/{{ GetPartFromEnd .Resource.Parent 6 | urlquery}}/{{ GetPartFromEnd .Resource.Parent 4 | urlquery}}/{{ GetLastPart .Resource.Parent | urlquery}}/{{ urlquery .Resource.Data.metadata.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
Pod: {{ .Resource.Data.metadata.name }}
{{ .Resource.Data.status.podIP }} | {{ .Resource.Data.status.phase }}
k8s.io/Service:
link: |
https://console.cloud.google.com/kubernetes/service/{{ GetPartFromEnd .Resource.Parent 6 | urlquery}}/{{ GetPartFromEnd .Resource.Parent 4 | urlquery}}/{{ GetLastPart .Resource.Parent | urlquery}}/{{ urlquery .Resource.Data.metadata.name }}?project={{ index .Ancestors 0 | GetLastPart }}
label: |
Service: {{ .Resource.Data.metadata.name }}
{{ .Resource.Data.spec.clusterIP }} | {{ .Resource.Data.spec.type }}
networking.k8s.io/Ingress:
label: |
Ingress: {{ .Resource.Data.metadata.name }}
{{ if .Resource.Data.status.loadBalancer.ingress }}{{ range .Resource.Data.status.loadBalancer.ingress }}{{ .ip }} | {{end}}{{end}}
extensions.k8s.io/Ingress:
label: |
Ingress: {{ .Resource.Data.metadata.name }}
{{ if .Resource.Data.status.loadBalancer.ingress }}{{ range .Resource.Data.status.loadBalancer.ingress }}{{ .ip }} | {{end}}{{end}}
rbac.authorization.k8s.io/RoleBinding:
label: |
RoleBinding: {{ .Resource.Data.metadata.name }}
{{ range .Resource.Data.subjects }}{{ .kind }}:{{ .name }} {{end}} ⟶ {{ .Resource.Data.roleRef.kind }}:{{ .Resource.Data.roleRef.name }}
rbac.authorization.k8s.io/ClusterRoleBinding:
label: |
RoleBinding: {{ .Resource.Data.metadata.name }}
{{ range .Resource.Data.subjects }}{{ .kind }}:{{ .name }} {{end}} ⟶ {{ .Resource.Data.roleRef.kind }}:{{ .Resource.Data.roleRef.name }}
rbac.authorization.k8s.io/Role:
label: |
{{ "{" }}Role: {{ .Resource.Data.metadata.name }}{{ with $rules := .Resource.Data.rules }}{{ "|{" }}Groups|Names|Resources|Verbs{{ "}" }}{{ range $i, $r := $rules }}{{ "|{" }} {{ JoinNicely .apiGroups }}|{{ JoinNicely .resourceNames }}|{{ JoinNicely .resources }}|{{ JoinNicely .verbs }}{{ "}" }} {{end}}{{end}}{{ "}" }}
rbac.authorization.k8s.io/ClusterRole:
label: |
{{ "{" }}Cluster Role: {{ .Resource.Data.metadata.name }}{{ with $rules := .Resource.Data.rules }}{{ "|{" }}Groups|Names|Resources|Verbs{{ "}" }}{{ range $i, $r := $rules }}{{ "|{" }} {{ JoinNicely .apiGroups }}|{{ JoinNicely .resourceNames }}|{{ JoinNicely .resources }}|{{ JoinNicely .verbs }}{{ "}" }} {{end}}{{end}}{{ "}" }}
serviceusage.googleapis.com/Service:
label: |
{{ .Resource.Data.name }}
{{ .Resource.Data.state }}