Skip to content

Commit c029026

Browse files
committed
chore: adding optional administrative unit
chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding dynamic block chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit chore: adding optional administrative unit
1 parent 2c42b1f commit c029026

File tree

6 files changed

+62
-14
lines changed

6 files changed

+62
-14
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,11 +199,12 @@ Before opening a Pull Request, please do the following:
199199
|------|-------------|------|---------|:--------:|
200200
| <a name="input_additional_permissions"></a> [additional\_permissions](#input\_additional\_permissions) | Additional Subscription-Level Permissions the Service Principal needs. | `list(string)` | `[]` | no |
201201
| <a name="input_additional_required_resource_accesses"></a> [additional\_required\_resource\_accesses](#input\_additional\_required\_resource\_accesses) | Additional AAD-Level Resource Accesses the replicator Service Principal needs. | `list(object({ resource_app_id = string, resource_accesses = list(object({ id = string, type = string })) }))` | `[]` | no |
202+
| <a name="input_administrative_unit_name"></a> [administrative\_unit\_name](#input\_administrative\_unit\_name) | Display name of the adminstration-unit name where the user groups are managed. | `string` | `null` | no |
202203
| <a name="input_application_owners"></a> [application\_owners](#input\_application\_owners) | List of user principals that should be added as owners to the created service principals. | `list(string)` | `[]` | no |
203204
| <a name="input_can_cancel_subscriptions_in_scopes"></a> [can\_cancel\_subscriptions\_in\_scopes](#input\_can\_cancel\_subscriptions\_in\_scopes) | The scopes to which Service Principal cancel subscription permission is assigned to. List of management group id of form `/providers/Microsoft.Management/managementGroups/<mgmtGroupId>/`. | `list(string)` | `[]` | no |
204205
| <a name="input_can_delete_rgs_in_scopes"></a> [can\_delete\_rgs\_in\_scopes](#input\_can\_delete\_rgs\_in\_scopes) | The scopes to which Service Principal delete resource group permission is assigned to. Only relevant when `replicator_rg_enabled`. List of subscription scopes of form `/subscriptions/<subscriptionId>`. | `list(string)` | `[]` | no |
205206
| <a name="input_create_passwords"></a> [create\_passwords](#input\_create\_passwords) | Create passwords for service principals. | `bool` | `true` | no |
206-
| <a name="input_mca"></a> [mca](#input\_mca) | n/a | <pre>object({<br> service_principal_names = list(string)<br> billing_account_name = string<br> billing_profile_name = string<br> invoice_section_name = string<br> })</pre> | `null` | no |
207+
| <a name="input_mca"></a> [mca](#input\_mca) | n/a | <pre>object({<br/> service_principal_names = list(string)<br/> billing_account_name = string<br/> billing_profile_name = string<br/> invoice_section_name = string<br/> })</pre> | `null` | no |
207208
| <a name="input_metering_assignment_scopes"></a> [metering\_assignment\_scopes](#input\_metering\_assignment\_scopes) | Names or UUIDs of the Management Groups that kraken should collect costs for. | `list(string)` | n/a | yes |
208209
| <a name="input_metering_enabled"></a> [metering\_enabled](#input\_metering\_enabled) | Whether to create Metering Service Principal or not. | `bool` | `true` | no |
209210
| <a name="input_metering_service_principal_name"></a> [metering\_service\_principal\_name](#input\_metering\_service\_principal\_name) | Service principal for collecting cost data. Kraken ist the name of the meshStack component. Name must be unique per Entra ID. | `string` | `"kraken"` | no |

main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ module "replicator_service_principal" {
6161
can_cancel_subscriptions_in_scopes = var.can_cancel_subscriptions_in_scopes
6262
can_delete_rgs_in_scopes = var.can_delete_rgs_in_scopes
6363

64+
administrative_unit_name = var.administrative_unit_name
6465
additional_required_resource_accesses = var.additional_required_resource_accesses
6566
additional_permissions = var.additional_permissions
6667

modules/meshcloud-replicator-service-principal/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@ No modules.
1515

1616
| Name | Type |
1717
|------|------|
18+
| [azuread_administrative_unit.meshcloud_replicator_au](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/administrative_unit) | resource |
19+
| [azuread_administrative_unit_role_member.meshcloud_replicator_role_member](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/administrative_unit_role_member) | resource |
1820
| [azuread_app_role_assignment.meshcloud_replicator-directory](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/app_role_assignment) | resource |
1921
| [azuread_app_role_assignment.meshcloud_replicator-group](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/app_role_assignment) | resource |
2022
| [azuread_app_role_assignment.meshcloud_replicator-user](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/app_role_assignment) | resource |
2123
| [azuread_application.meshcloud_replicator](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/application) | resource |
2224
| [azuread_application_federated_identity_credential.meshcloud_replicator](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/application_federated_identity_credential) | resource |
2325
| [azuread_application_password.application_pw](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/application_password) | resource |
26+
| [azuread_directory_role.meshcloud_replicator_role](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/directory_role) | resource |
2427
| [azuread_service_principal.meshcloud_replicator](https://registry.terraform.io/providers/hashicorp/azuread/latest/docs/resources/service_principal) | resource |
2528
| [azurerm_management_group_policy_assignment.privilege-escalation-prevention](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/management_group_policy_assignment) | resource |
2629
| [azurerm_policy_definition.privilege_escalation_prevention](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/policy_definition) | resource |
@@ -42,6 +45,7 @@ No modules.
4245
|------|-------------|------|---------|:--------:|
4346
| <a name="input_additional_permissions"></a> [additional\_permissions](#input\_additional\_permissions) | Additional Subscription-Level Permissions the Service Principal needs. | `list(string)` | `[]` | no |
4447
| <a name="input_additional_required_resource_accesses"></a> [additional\_required\_resource\_accesses](#input\_additional\_required\_resource\_accesses) | Additional AAD-Level Resource Accesses the Service Principal needs. | `list(object({ resource_app_id = string, resource_accesses = list(object({ id = string, type = string })) }))` | `[]` | no |
48+
| <a name="input_administrative_unit_name"></a> [administrative\_unit\_name](#input\_administrative\_unit\_name) | Display name of the adminstration-unit name where the user groups are managed. | `string` | `null` | no |
4549
| <a name="input_application_owners"></a> [application\_owners](#input\_application\_owners) | List of user principals that should be added as owners to the replicator service principal. | `list(string)` | `[]` | no |
4650
| <a name="input_assignment_scopes"></a> [assignment\_scopes](#input\_assignment\_scopes) | The scopes to which Service Principal permissions is assigned to. List of management group id of form `/providers/Microsoft.Management/managementGroups/<mgmtGroupId>/`. | `list(string)` | n/a | yes |
4751
| <a name="input_can_cancel_subscriptions_in_scopes"></a> [can\_cancel\_subscriptions\_in\_scopes](#input\_can\_cancel\_subscriptions\_in\_scopes) | The scopes to which Service Principal cancel subscription permission is assigned to. List of management group id of form `/providers/Microsoft.Management/managementGroups/<mgmtGroupId>/`. | `list(string)` | `[]` | no |

modules/meshcloud-replicator-service-principal/module.tf

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -128,22 +128,26 @@ resource "azuread_application" "meshcloud_replicator" {
128128
access_token_issuance_enabled = false
129129
}
130130
}
131-
required_resource_access {
132-
resource_app_id = data.azuread_application_published_app_ids.well_known.result.MicrosoftGraph
131+
dynamic "required_resource_access" {
132+
for_each = var.administrative_unit_name == null ? [1] : []
133133

134-
resource_access {
135-
id = data.azuread_service_principal.msgraph.app_role_ids["Directory.Read.All"]
136-
type = "Role"
137-
}
134+
content {
135+
resource_app_id = data.azuread_application_published_app_ids.well_known.result.MicrosoftGraph
138136

139-
resource_access {
140-
id = data.azuread_service_principal.msgraph.app_role_ids["Group.ReadWrite.All"]
141-
type = "Role"
142-
}
137+
resource_access {
138+
id = data.azuread_service_principal.msgraph.app_role_ids["Directory.Read.All"]
139+
type = "Role"
140+
}
143141

144-
resource_access {
145-
id = data.azuread_service_principal.msgraph.app_role_ids["User.Invite.All"]
146-
type = "Role"
142+
resource_access {
143+
id = data.azuread_service_principal.msgraph.app_role_ids["Group.ReadWrite.All"]
144+
type = "Role"
145+
}
146+
147+
resource_access {
148+
id = data.azuread_service_principal.msgraph.app_role_ids["User.Invite.All"]
149+
type = "Role"
150+
}
147151
}
148152
}
149153

@@ -306,3 +310,28 @@ resource "azurerm_management_group_policy_assignment" "privilege-escalation-prev
306310
]
307311
}
308312

313+
//---------------------------------------------------------------------------
314+
// Administrative Unit
315+
//---------------------------------------------------------------------------
316+
resource "azuread_administrative_unit" "meshcloud_replicator_au" {
317+
count = var.administrative_unit_name == null ? 0 : 1
318+
display_name = var.administrative_unit_name
319+
}
320+
321+
//---------------------------------------------------------------------------
322+
// Directory Role (Admin Role)
323+
//---------------------------------------------------------------------------
324+
resource "azuread_directory_role" "meshcloud_replicator_role" {
325+
count = var.administrative_unit_name == null ? 0 : 1
326+
display_name = "Groups Administrator"
327+
}
328+
329+
//---------------------------------------------------------------------------
330+
// Assign the Service Principal to the Directory Role in the Administrative Unit
331+
//---------------------------------------------------------------------------
332+
resource "azuread_administrative_unit_role_member" "meshcloud_replicator_role_member" {
333+
count = var.administrative_unit_name == null ? 0 : 1
334+
role_object_id = azuread_directory_role.meshcloud_replicator_role[0].object_id
335+
administrative_unit_object_id = azuread_administrative_unit.meshcloud_replicator_au[0].object_id
336+
member_object_id = azuread_service_principal.meshcloud_replicator.object_id
337+
}

modules/meshcloud-replicator-service-principal/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ variable "service_principal_name" {
33
description = "Display name of the replicator service principal."
44
}
55

6+
variable "administrative_unit_name" {
7+
type = string
8+
default = null
9+
description = "Display name of the adminstration-unit name where the user groups are managed."
10+
}
11+
612
variable "custom_role_scope" {
713
type = string
814
description = "The scope to which Service Principal permissions can be assigned to. Usually this is the management group id of form `/providers/Microsoft.Management/managementGroups/<tenantId>` that sits atop the subscriptions."

variables.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ variable "metering_assignment_scopes" {
3737
description = "Names or UUIDs of the Management Groups that kraken should collect costs for."
3838
}
3939

40+
41+
variable "administrative_unit_name" {
42+
type = string
43+
description = "Display name of the adminstration-unit name where the user groups are managed."
44+
default = null
45+
}
46+
4047
# SSO inputs
4148

4249
variable "sso_enabled" {

0 commit comments

Comments
 (0)