Allow multiple types in JSON schema docs tool (#3126)

* allow multiple types in JSON schema docs tool

* support pattern

* support pattern
This commit is contained in:
Ludovico Magnocavallo
2025-05-31 11:58:20 +02:00
committed by GitHub
parent 6090198b50
commit 6b04ce769d
53 changed files with 188 additions and 46 deletions

View File

@@ -24,3 +24,4 @@
## Definitions

View File

@@ -16,3 +16,4 @@
## Definitions

View File

@@ -9,6 +9,8 @@
- **name**: *string*
- **includedPermissions**: *array*
- items: *string*
<br>*pattern: ^[a-zA-Z-]+\.[a-zA-Z-]+\.[a-zA-Z-]+$*
## Definitions

View File

@@ -30,4 +30,4 @@
<br>*additional properties: false*
- **all**: *boolean*
- **values**: *array*
- items: *string*
- items: *string*

View File

@@ -19,3 +19,4 @@
## Definitions

View File

@@ -65,11 +65,13 @@
<br>*additional properties: false*
- **environment**: *string*
- **principal**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_viewer**: *array*
- items: *object*
<br>*additional properties: false*
- **environment**: *string*
- **principal**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
## Definitions
@@ -77,13 +79,16 @@
<br>*additional properties: false*
- **`^(?:roles/|[a-z_]+)`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z])*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -94,7 +99,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z])*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -103,4 +110,5 @@
- **iam_by_principals**<a name="refs-iam_by_principals"></a>: *object*
<br>*additional properties: false*
- **`^[a-z]+[a-z-]+$`**: *array*
- items: *string*
- items: *string*
<br>*pattern: ^(?:roles/|[a-z_]+)*

View File

@@ -61,13 +61,16 @@
<br>*additional properties: false*
- **`^(?:roles/|[a-z_]+)`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -78,7 +81,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z])*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -87,4 +92,5 @@
- **iam_by_principals**<a name="refs-iam_by_principals"></a>: *object*
<br>*additional properties: false*
- **`^[a-z]+[a-z-]+$`**: *array*
- items: *string*
- items: *string*
<br>*pattern: ^(?:roles/|[a-z_]+)*

View File

@@ -30,4 +30,4 @@
<br>*additional properties: false*
- **all**: *boolean*
- **values**: *array*
- items: *string*
- items: *string*

View File

@@ -16,6 +16,7 @@
<br>*additional properties: false*
- **`@`**: *array*
- items: *string*
<br>*pattern: ^(?:ALL|SUSPENSION|SECURITY|TECHNICAL|BILLING|LEGAL|PRODUCT_UPDATES)$*
- **factories_config**: *object*
<br>*additional properties: false*
- **org_policies**: *string*
@@ -36,6 +37,7 @@
<br>*additional properties: false*
- **exempted_members**: *array*
- items: *string*
<br>*pattern: @*
- **logging_exclusions**: *object*
*additional properties: String*
- **logging_settings**: *object*
@@ -81,13 +83,16 @@
<br>*additional properties: false*
- **`^(?:roles/|[a-z_]+)`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc|self)*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc|self)*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z_]+)*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -98,7 +103,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc|self)*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z_]+)*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -107,4 +114,5 @@
- **iam_by_principals**<a name="refs-iam_by_principals"></a>: *object*
<br>*additional properties: false*
- **`^[a-z]+[a-z-]+$`**: *array*
- items: *string*
- items: *string*
<br>*pattern: ^(?:roles/|[a-z_]+)*

View File

@@ -41,3 +41,4 @@
## Definitions

View File

@@ -15,6 +15,7 @@
<br>*enum: ['IDENTITY_TYPE_UNSPECIFIED', 'ANY_IDENTITY', 'ANY_USER_ACCOUNT', 'ANY_SERVICE_ACCOUNT', '']*
- **identities**: *array*
- items: *string*
<br>*pattern: ^(?:serviceAccount:|user:|group:|principal:)*
- **resources**: *array*
- items: *string*
- ⁺**to**: *object*
@@ -36,3 +37,4 @@
## Definitions

View File

@@ -32,3 +32,4 @@
## Definitions

View File

@@ -7,7 +7,7 @@
*additional properties: false*
- **description**: *string*
- **title**: *string*
- **ignore_resource_changes**: *boolean*
- **spec**: *object*
<br>*additional properties: false*
- **access_levels**: *array*
@@ -34,6 +34,7 @@
- **restricted_services**: *array*
- items: *string*
- **vpc_accessible_services**: *reference([VpcAccessibleServices](#refs-VpcAccessibleServices))*
- **title**: *string*
- **use_explicit_dry_run_spec**: *boolean*
## Definitions
@@ -42,4 +43,4 @@
<br>*additional properties: false*
- ⁺**allowed_services**: *array*
- items: *string*
- **enable_restriction**: *boolean*
- **enable_restriction**: *boolean*

View File

@@ -46,4 +46,4 @@
- items: *object*
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- **ports**: *array*

View File

@@ -38,4 +38,5 @@
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- items: *number*
- items: *(integer|string)*
<br>*pattern: `^[0-9]+(?:-[0-9]+)?$`*

View File

@@ -39,13 +39,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -56,9 +59,11 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
- ⁺**title**: *string*
- **description**: *string*
- **description**: *string*

View File

@@ -46,4 +46,4 @@
- items: *object*
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- **ports**: *array*

View File

@@ -38,4 +38,5 @@
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- items: *number*
- items: *(integer|string)*
<br>*pattern: `^[0-9]+(?:-[0-9]+)?$`*

View File

@@ -39,13 +39,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -56,9 +59,11 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
- ⁺**title**: *string*
- **description**: *string*
- **description**: *string*

View File

@@ -46,4 +46,4 @@
- items: *object*
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- **ports**: *array*

View File

@@ -38,4 +38,5 @@
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- items: *number*
- items: *(integer|string)*
<br>*pattern: `^[0-9]+(?:-[0-9]+)?$`*

View File

@@ -39,13 +39,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -56,9 +59,11 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
- ⁺**title**: *string*
- **description**: *string*
- **description**: *string*

View File

@@ -59,4 +59,4 @@
<br>*additional properties: false*
- **day**: *number*
- **month**: *number*
- **year**: *number*
- **year**: *number*

View File

@@ -47,13 +47,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -64,7 +67,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -73,4 +78,5 @@
- **iam_by_principals**<a name="refs-iam_by_principals"></a>: *object*
<br>*additional properties: false*
- **`^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])`**: *array*
- items: *string*
- items: *string*
<br>*pattern: ^roles/*

View File

@@ -8,6 +8,7 @@
- **automation**: *object*
<br>*additional properties: false*
- **prefix**: *string*
- ⁺**project**: *string*
- **bucket**: *reference([bucket](#refs-bucket))*
- **service_accounts**: *object*
@@ -86,12 +87,14 @@
- **iam_self_roles**: *array*
- items: *string*
- **iam_project_roles**: *reference([iam_project_roles](#refs-iam_project_roles))*
- **iam_sa_roles**: *reference([iam_sa_roles](#refs-iam_sa_roles))*
- **service_encryption_key_ids**: *object*
<br>*additional properties: false*
- **`^[a-z-]+\.googleapis\.com$`**: *array*
- items: *string*
- **services**: *array*
- items: *string*
<br>*pattern: ^[a-z-]+\.googleapis\.com$*
- **shared_vpc_host_config**: *object*
<br>*additional properties: false*
- ⁺**enabled**: *boolean*
@@ -146,13 +149,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -163,7 +169,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -173,6 +181,7 @@
<br>*additional properties: false*
- **`^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])`**: *array*
- items: *string*
<br>*pattern: ^roles/*
- **iam_billing_roles**<a name="refs-iam_billing_roles"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9-]+$`**: *array*
@@ -196,4 +205,4 @@
- **iam_storage_roles**<a name="refs-iam_storage_roles"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9-]+$`**: *array*
- items: *string*
- items: *string*

View File

@@ -20,13 +20,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -37,9 +40,11 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
- ⁺**title**: *string*
- **description**: *string*
- **description**: *string*

View File

@@ -13,6 +13,7 @@
- **location**: *string*
- **impersonation_principals**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **deploy_config**: *object*
<br>*additional properties: false*
- **composer**: *object*
@@ -20,7 +21,7 @@
- **encryption_key**: *string*
- **environment_size**: *string*
<br>*default: ENVIRONMENT_SIZE_SMALL*, *enum: ['ENVIRONMENT_SIZE_SMALL', 'ENVIRONMENT_SIZE_MEDIUM', 'ENVIRONMENT_SIZE_LARGE']*
- **node_config**: *object*
- **node_config**: *object*
<br>*additional properties: false*
- **service_account**: *string*
- ⁺**network**: *string*
@@ -89,13 +90,16 @@
<br>*additional properties: false*
- **`^(?:roles/|[a-z_]+)`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z])*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -106,7 +110,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z])*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -116,7 +122,8 @@
<br>*additional properties: false*
- **`^[a-z]+[a-z0-9-]+$`**: *array*
- items: *string*
<br>*pattern: ^(?:roles/|[a-z_]+)*
- **iam_storage_roles**<a name="refs-iam_storage_roles"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9-]+$`**: *array*
- items: *string*
- items: *string*

View File

@@ -11,6 +11,7 @@
- **location**: *string*
- **impersonation_principals**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **exposure_layer**: *object*
<br>*additional properties: false*
- **bigquery**: *object*
@@ -64,13 +65,16 @@
<br>*additional properties: false*
- **`^(?:roles/|[a-z_]+)`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z])*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -81,7 +85,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^(?:roles/|[a-z])*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -91,7 +97,8 @@
<br>*additional properties: false*
- **`^[a-z]+[a-z0-9-]+$`**: *array*
- items: *string*
<br>*pattern: ^(?:roles/|[a-z_]+)*
- **iam_storage_roles**<a name="refs-iam_storage_roles"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9-]+$`**: *array*
- items: *string*
- items: *string*

View File

@@ -59,4 +59,4 @@
<br>*additional properties: false*
- **day**: *number*
- **month**: *number*
- **year**: *number*
- **year**: *number*

View File

@@ -31,13 +31,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -48,7 +51,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -57,4 +62,5 @@
- **iam_by_principals**<a name="refs-iam_by_principals"></a>: *object*
<br>*additional properties: false*
- **`^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])`**: *array*
- items: *string*
- items: *string*
<br>*pattern: ^roles/*

View File

@@ -20,13 +20,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -37,9 +40,11 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
- ⁺**title**: *string*
- **description**: *string*
- **description**: *string*

View File

@@ -30,4 +30,4 @@
<br>*additional properties: false*
- **all**: *boolean*
- **values**: *array*
- items: *string*
- items: *string*

View File

@@ -46,4 +46,4 @@
- items: *object*
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- **ports**: *array*

View File

@@ -22,3 +22,4 @@
## Definitions

View File

@@ -12,3 +12,4 @@
## Definitions

View File

@@ -39,6 +39,7 @@
- items: *string*
- **services**: *array*
- items: *string*
<br>*pattern: ^[a-z-]+\.googleapis\.com$*
- **org_policies**: *reference([orgPolicies](#refs-orgPolicies))*
- **metric_scopes**: *array*
- items: *string*
@@ -410,7 +411,9 @@
- ⁺**title**: *string*
- **description**: *string*
- **principalPattern**<a name="refs-principalPattern"></a>: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **rolePattern**<a name="refs-rolePattern"></a>: *string*
<br>*pattern: ^roles/*
- **iam**<a name="refs-iam"></a>: *object*
<br>*additional properties: false*
- **`^roles/`**: *array*
@@ -457,4 +460,4 @@
<br>*additional properties: false*
- **all**: *boolean*
- **values**: *array*
- items: *string*
- items: *string*

View File

@@ -38,4 +38,5 @@
<br>*additional properties: false*
- **protocol**: *string*
- **ports**: *array*
- items: *number*
- items: *(integer|string)*
<br>*pattern: `^[0-9]+(?:-[0-9]+)?$`*

View File

@@ -39,13 +39,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -56,9 +59,11 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|ro|rw)*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
- ⁺**title**: *string*
- **description**: *string*
- **description**: *string*

View File

@@ -9,6 +9,8 @@
- **name**: *string*
- **includedPermissions**: *array*
- items: *string*
<br>*pattern: ^[a-zA-Z-]+\.[a-zA-Z-]+\.[a-zA-Z-]+$*
## Definitions

View File

@@ -30,4 +30,4 @@
<br>*additional properties: false*
- **all**: *boolean*
- **values**: *array*
- items: *string*
- items: *string*

View File

@@ -19,3 +19,4 @@
## Definitions

View File

@@ -59,4 +59,4 @@
<br>*additional properties: false*
- **day**: *number*
- **month**: *number*
- **year**: *number*
- **year**: *number*

View File

@@ -47,13 +47,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -64,7 +67,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -73,4 +78,5 @@
- **iam_by_principals**<a name="refs-iam_by_principals"></a>: *object*
<br>*additional properties: false*
- **`^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])`**: *array*
- items: *string*
- items: *string*
<br>*pattern: ^roles/*

View File

@@ -94,6 +94,7 @@
- items: *string*
- **services**: *array*
- items: *string*
<br>*pattern: ^[a-z-]+\.googleapis\.com$*
- **shared_vpc_host_config**: *object*
<br>*additional properties: false*
- ⁺**enabled**: *boolean*
@@ -148,13 +149,16 @@
<br>*additional properties: false*
- **`^roles/`**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **iam_bindings**<a name="refs-iam_bindings"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **members**: *array*
- items: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -165,7 +169,9 @@
- **`^[a-z0-9_-]+$`**: *object*
<br>*additional properties: false*
- **member**: *string*
<br>*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])*
- **role**: *string*
<br>*pattern: ^roles/*
- **condition**: *object*
<br>*additional properties: false*
- ⁺**expression**: *string*
@@ -175,6 +181,7 @@
<br>*additional properties: false*
- **`^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])`**: *array*
- items: *string*
<br>*pattern: ^roles/*
- **iam_billing_roles**<a name="refs-iam_billing_roles"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9-]+$`**: *array*
@@ -198,4 +205,4 @@
- **iam_storage_roles**<a name="refs-iam_storage_roles"></a>: *object*
<br>*additional properties: false*
- **`^[a-z0-9-]+$`**: *array*
- items: *string*
- items: *string*

View File

@@ -9,6 +9,8 @@
- **name**: *string*
- **includedPermissions**: *array*
- items: *string*
<br>*pattern: ^[a-zA-Z-]+\.[a-zA-Z-]+\.[a-zA-Z-]+$*
## Definitions

View File

@@ -163,4 +163,4 @@
- **trigger**<a name="refs-trigger"></a>: *object*
<br>*additional properties: false*
- **count**: *number*
- **percent**: *number*
- **percent**: *number*

View File

@@ -30,4 +30,4 @@
<br>*additional properties: false*
- **all**: *boolean*
- **values**: *array*
- items: *string*
- items: *string*

View File

@@ -22,3 +22,4 @@
## Definitions

View File

@@ -41,3 +41,4 @@
## Definitions

View File

@@ -15,6 +15,7 @@
<br>*enum: ['IDENTITY_TYPE_UNSPECIFIED', 'ANY_IDENTITY', 'ANY_USER_ACCOUNT', 'ANY_SERVICE_ACCOUNT', '']*
- **identities**: *array*
- items: *string*
<br>*pattern: ^(?:serviceAccount:|user:|group:|principal:)*
- **resources**: *array*
- items: *string*
- ⁺**to**: *object*
@@ -36,3 +37,4 @@
## Definitions

View File

@@ -32,3 +32,4 @@
## Definitions

View File

@@ -7,7 +7,7 @@
*additional properties: false*
- **description**: *string*
- **title**: *string*
- **ignore_resource_changes**: *boolean*
- **spec**: *object*
<br>*additional properties: false*
- **access_levels**: *array*
@@ -34,6 +34,7 @@
- **restricted_services**: *array*
- items: *string*
- **vpc_accessible_services**: *reference([VpcAccessibleServices](#refs-VpcAccessibleServices))*
- **title**: *string*
- **use_explicit_dry_run_spec**: *boolean*
## Definitions
@@ -42,4 +43,4 @@
<br>*additional properties: false*
- ⁺**allowed_services**: *array*
- items: *string*
- **enable_restriction**: *boolean*
- **enable_restriction**: *boolean*

View File

@@ -28,24 +28,30 @@ DOC = '\n\n'.join(
Array = collections.namedtuple('Array', 'name items default', defaults=[None])
Boolean = collections.namedtuple('Boolean', 'name default')
Integer = collections.namedtuple('Integer', 'name default enum')
AnyOf = collections.namedtuple('AnyOf', 'name default pattern types')
Number = collections.namedtuple('Number', 'name default enum')
Object = collections.namedtuple(
'Object', 'name required additional pattern properties defs')
Reference = collections.namedtuple('Reference', 'name to')
String = collections.namedtuple('String', 'name default enum')
String = collections.namedtuple('String', 'name default enum pattern')
def parse_node(node, name=None):
logging.debug(f'parse {name} type {node.get("type")}')
name = name or node.get('title')
el_type = node.get('type')
default = node.get('default')
enum = node.get('enum')
pattern = node.get('pattern')
if isinstance(el_type, list):
return AnyOf(name, default, pattern, el_type)
match el_type:
case 'array':
items = node.get('items')
items = parse_node(items, 'items') if items else None
el = Array(name, items, node.get('default'))
el = Array(name, items, default)
case 'boolean':
el = Boolean(name, node.get('default'))
el = Boolean(name, default)
case 'object':
additional = node.get('additionalProperties')
if isinstance(additional, dict):
@@ -64,11 +70,11 @@ def parse_node(node, name=None):
for k, v in defs.items():
el.defs.append(parse_node(v, k))
case 'integer':
el = Integer(name, node.get('default'), node.get('enum'))
el = Integer(name, default, enum)
case 'number':
el = Number(name, node.get('default'), node.get('enum'))
el = Number(name, default, enum)
case 'string':
el = String(name, node.get('default'), node.get('enum'))
el = String(name, default, enum, pattern)
case _:
ref = node.get('$ref')
if ref:
@@ -117,12 +123,18 @@ def render_node(el, level=0, required=False, f_name=lambda f: f'**{f}**'):
case 'reference':
buffer[-1] = (
f'{indent}- {f_name(el.name)}: *reference([{el.to}](#refs-{el.to}))*')
case 'anyof':
buffer[-1] = f'{indent}- {r}{f_name(el.name)}: *({"|".join(el.types)})*'
if el.pattern:
buffer.append(f'{indent} <br>*pattern: `{el.pattern}`*')
case 'integer' | 'number' | 'string':
details = []
if el.default:
details.append(f'*default: {el.default}*')
if el.enum:
details.append(f'*enum: {el.enum}*')
if getattr(el, 'pattern', None):
details.append(f'*pattern: {el.pattern}*')
if details:
buffer.append(f'{indent} <br>{", ".join(details)}')
if level == 0:
@@ -149,7 +161,7 @@ def main(paths=None):
doc = DOC.format(title=schema.get('title'), properties=props,
definitions=defs or '')
f_doc = f.with_suffix('.md')
f_doc.write_text(doc)
f_doc.write_text(f'{doc}\n')
logging.info(f'doc {f}')